Objektorientierte Programmierung

Ähnliche Dokumente
Objektorientierte Programmierung OOP

Objektorientierte Programmierung OOP

Vorkurs Informatik: Erste Schritte der Programmierung mit C++

Informatik I. 15. Objekt-orientierte Programmierung: Einstieg. 03. Dezember Albert-Ludwigs-Universität Freiburg. Informatik I.

PYTHON. 06 Objektorientierung II

7. Programmierungs- Phase Software Engineering (FB EIT) Wintersemester 2007 / 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, FB Informatik

Informationsverarbeitung im Bauwesen

10. Programmierungs-Phase: Objektorientierung Software Engineering

Objektorientierte Programmierung III

Prinzipien der objektorientierten Programmierung (OOP)

Programmierparadigmen

Klassen als Objekte. Smalltalk vs. Objective-C. Self-Nachrichten an Klassen in Objective-C. Klassen als Objekte. Smalltalk: Everything is an object

Beziehungen zwischen Objekten

Vererbung und Polymorphie

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Repetitorium Informatik (Java)

Inhaltsüberblick. I. Grundbegriffe - Objekte und Klassen. Organisatorisches. I. Grundbegriffe - Objektorientierte Konzepte

Anwendungsentwicklung mit Java. Grundlagen der OOP, Vererbung, Schnittstellen, Polymorphie

OOP und Angewandte Mathematik. Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik

C++ - Objektorientierte Programmierung Vererbung

Gliederung der Folien

HSR Rapperswil 2001 Markus Rigling. Programmieren: Vererbung. 1 Variante 2

Begriffe 1 (Wiederholung)

Programmieren in Java

Objektorientierte Programmierung (OOP) mit Matlab - Ein Crashkurs

Manfred Schüttengruber. Objektorientierte Programmierung mit Visual Basic 2005

11 Vererbung und Klassenhierarchie

Tag 7 Repetitorium Informatik (Java)

Programmierparadigmen

Silke Trißl Wissensmanagement in der Bioinformatik. Objektorientierte Programmierung (OOP) Vorstellung wie in der realen Welt: Farbe Hubraum Tank...

Skriptum Bauinformatik SS 2013 (Vorlesung III)

Objektorientierte Konzepte

Objektorientierte Modellierung (1)

Objektorientierte Programmierung (OOP)

Einstieg in die Informatik mit Java

Java für Bauingenieure

Methoden und Klassen. Silke Trißl Wissensmanagement in der Bioinformatik

Vererbung P rogram m ieren 2 F örster/r iedham m er K apitel 11: V ererbung 1

Teil VI. Objektorientierte Programmierung. T. Neckel Einführung in die wissenschaftliche Programmierung IN8008 Wintersemester 2016/

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Einstieg in die Informatik mit Java

Objektorientierte Programmierung mit Python Objekt und Klassen

Objektorientiertes Programmieren III

Einstieg in die Informatik mit Java

Objektorientierte Programmierung und Klassen

Java Vererbung. Inhalt

7. Übung Informatik II - Objektorientierte Programmierung

Programmieren 2 C++ Überblick

Silke Trißl, Prof. Ulf Leser Wissensmanagement in der Bioinformatik. Jede Applikation braucht eine Klasse mit einer main-methode

Auf einen Blick. 1 Einleitung Die Basis der Objektorientierung Die Prinzipien des objektorientierten Entwurfs...

Vererbung. Generalisierung und Spezialisierung Vererbung und Polymorphismus

7. Objektorientierung. Informatik II für Verkehrsingenieure

Einführung in die Programmiersprache Java II

Objektorientierte Programmierung mit Python Polymorphismus und Vererbung. Eltern

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Institut für Programmierung und Reaktive Systeme. Java 7. Markus Reschke

Rückblick: Benutzerdefinierte Datentypen Definition der Klasse Vektor als Container für 2-dimensionale Vektoren

Java-Programmierung mit NetBeans

Objektorientierte Programmierung II

Einstieg in die Informatik mit Java

Objektorientierte Programmierung

Grundlagen. Felix Döring, Felix Wittwer 24. April Python-Kurs

Praxisbuch Objektorientierung

Inhaltsverzeichnis. Kurseinheit 1. Kurseinheit 2

Programmieren in Java

Th. Letschert OOP 2 2. Geheimnisprinzip und Sichtbarkeitsbeziehungen

Philipp Güttler Objektorientierung und komplexe Datentypen

8. Objektorientierte Programmierung. Informatik II für Verkehrsingenieure

Kompetent objektorientiert programmieren

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

11 Objektorientierte Programmierung, Teil 2

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Gerüstbeispiel. Vererbungshierarchie: Typ 0

Einführung in die Informatik

Ein Vortrag im Rahmen des Wahlpflichtmoduls Fortgeschrittene Programmierung mit JAVA

5.5.8 Öffentliche und private Eigenschaften

Informationsverarbeitung im Bauwesen

Inhaltsverzeichnis. Grundlagen und Einführung (1. Band) 1

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 23.5.

11/2009 Bernhard Gangl. Steuerungen mit OOP entwickeln 11 / Themenübersicht. Übersicht und Begriffsklärung: Objektorientierte Programmierung

Java Einführung Vererbung und Polymorphie. Kapitel 13

Objektorientierte Programmierung

Abschnitt 10: Datenstrukturen

Transkript:

Objektorientierte Programmierung Objektorientierte Programmierung Ronja Düffel WS2018/19 09. Oktober 2018

Objektorientierte Programmierung Überblick 1 Was ist das? 2 Wie geht das? 3 Warum gibt es das? 4 Wie geht das in Python?

Objektorientierte Programmierung > Was ist das? Überblick 1 Was ist das? 2 Wie geht das? 3 Warum gibt es das? 4 Wie geht das in Python?

Objektorientierte Programmierung > Was ist das? Programmierparadigmen Es gibt viele verschiedene höhere Programmiersprachen! prozedural logisch imperativ Objektorientiert deklarativ funktional

Objektorientierte Programmierung > Was ist das? Was ist das? ein Programmierparadigma (Programmierstil) Art und Weise an ein Problem und dessen Lösung heranzugehen, es zu modellieren und somit auch zu programmieren bisher: Prozedurale Programmierung Zerlegung in Variablen, Datenstrukturen und Funktionen Funktionen operieren direkt auf Datenstrukturen Objektorientierung: Beschreibung eines Systems anhand des Zusammenspiels kooperierender Objekte

Objektorientierte Programmierung > Was ist das? Objekte Objekte sind überall werden von uns als solche wahrgenommen Begriff eher unscharf kann auch abstrakter sein In der realen Welt Zustand Verhalten OO-Programmierung Attribute Methoden

Objektorientierte Programmierung > Wie geht das? Überblick 1 Was ist das? 2 Wie geht das? 3 Warum gibt es das? 4 Wie geht das in Python?

Objektorientierte Programmierung > Wie geht das? Objekte in OOP Zustand gespeichert in Attributwerten Verhalten festgelegt durch Methoden Interaktion mit anderen Objekten durch Methoden Zustand ist versteckt, nur über Methoden erreichbar Methoden definieren Schnittstelle, über die andere Objekte mit dem Objekt interagieren. (Datenkapselung)

Objektorientierte Programmierung > Wie geht das? Klassen und Objekte Klasse definiert für eine Menge von Objekten deren Struktur (Attribute), Verhalten(Methoden) und Beziehungen Bauplan für Objekt Definition aller Attribute und Methoden Besitzt Mechanismus zur Erzeugung eines Objekts Klasse allein macht noch nichts Objekt ist konkrete Ausprägung (Instanz) der Klasse Jedem Objekt ist genau eine Klasse zugeordnet

Objektorientierte Programmierung > Wie geht das? Objekte der Klasse Kuh Klasse Kuh Objekt Kuh Elsa Name Elsa Euter Geburtsdatum 25. Mai 2015 Milchleistung 34l/Tag

Objektorientierte Programmierung > Wie geht das? Klassenhierarchie Verschiedene Arten von Objekten haben häufig Gemeinsamkeiten ist ein -Beziehungen Beispiel: Superklasse Elternklasse Oberklasse Basisklasse Subklasse Kindklasse Unterklasse abgeleitete Klasse

Objektorientierte Programmierung > Wie geht das? Vererbung Kindklassen erben alle Attribute und Methoden von Elternklassen haben zusätzlich eigene Attribute und Methoden können Attribute und Methoden der Elternklasse überschreiben

Objektorientierte Programmierung > Wie geht das? abstrakte Klasse enthält nur leere Methoden kann keine Instanz erzeugen dient zur Zusammenfassung ähnlicher Klassen definiert gemeinsame Attribut- und Methodennamen zwingt alle Kindklassen Attribute und Methoden mit entsprechendem Namen zu haben

Objektorientierte Programmierung > Warum gibt es das? Überblick 1 Was ist das? 2 Wie geht das? 3 Warum gibt es das? 4 Wie geht das in Python?

Objektorientierte Programmierung > Warum gibt es das? Warum gibt es das? Zunahme der Rechnerleistung größere Programme komplexere Software größere Projekte Modularität

Objektorientierte Programmierung > Warum gibt es das? Vorteil Abstraktion: Betrachtung der Objekte und ihrer Eigenschaften und Fähigkeiten, ohne Festlegung auf Implementierung Datenkapselung: Objekt interagiert nur über vordefinierte Methoden. Implementierung kann verändert werden, ohne dass ander Teile des Programms geändert werden müssen Vererbung: klarere Struktur und weniger Redundanz Wiederverwendbarkeit: Programme können einfacher erweitert und modifiziert werden. Klassen können auch in anderen Prorammen verwendet werden.

Objektorientierte Programmierung > Warum gibt es das? Nachteile Formulierung: natürliche Sprache hat keine feste Bindung von Substantiv (Objekt) und Verb (Methode). Klassenhierarchie: ist in der realen Wlt nicht immer so klar. (z.b. Kreis-Ellipse-Problem) Transparenz: Kontrollfluss nicht im Quelltext (besonders problematisch bei Parallelisierung) Laufzeit- und Energieeffizienz: OOP-Anwendungen benötigen häufig mehr Energie und längere Laufzeit

Überblick 1 Was ist das? 2 Wie geht das? 3 Warum gibt es das? 4 Wie geht das in Python?

Klassen in Python Klasse: class KlassenName: def method1(self, ): def method2(self, ): Verwendung: obj1 = KlassenName() obj1.method1()

Konstruktor Konstruktor: erzeugt ein Objekt (Instanz) der Klasse def init (self, ):... Beispiel: 1 class Konto: 2 # Konstruktor 3 def init (self, name, nummer): 4 self.inhaber = name 5 self.kontonummer = nummer 6 self.saldo = 0 7 8 9 def einzahlen(self, betrag): 10 self.saldo = self.saldo + betrag

Beispiel: Konto 1 from konto1 import Konto 2 3 k1 = Konto("Bob", 19836) 4 k2 = Konto("Alice", 39748) 5 6 k1.einzahlen(500) 7 k2.einzahlen(700) 8 9 print(k1.saldo, k1.inhaber, k1.kontonummer) 10 print(k2.saldo, k2.inhaber, k2.kontonummer)

Variablen/Attribute Klassenvariablen: wird von allen Instanzen einer Klasse geteilt mit <KlassenName>.<AttributName> innerhalb und außerhalb der Klasse erreichbar Objektvariable: Existiert allein für dieses Objekt (Instanz der Klasse) <ObjektName>.<AttributName> innerhalb der Klasse erreichbar (evtl. auch außerhalb). Destruktor: löscht eine Instanz/Objekt der Klasse nur notwendig, wenn beim Löschen tatsächlich etwas passieren muss

Beispiel: Klassenvariable 1 class Konto: 2 anzkont = 0 #Klassenvariable 3 # Konstruktor 4 def init (self, name, nummer): 5 self.inhaber = name 6 self.kontonummer = nummer 7 self.saldo = 0 8 Konto.anzKont = Konto.anzKont + 1 9 10 11 def einzahlen(self, betrag): 12 self.saldo = self.saldo + betrag 13 14 def del (self): 15 Konto.anzKont = Konto.anzKont - 1

Beispiel: Klassenvariable 1 from konto2 import Konto 2 print("anzahl der Konten:", Konto.anzKont) 3 4 k1 = Konto("Bob", 19836) 5 k2 = Konto("Alice", 39748) 6 7 k1.einzahlen(500) 8 k2.einzahlen(700) 9 10 print(k1.saldo, k1.inhaber, k1.kontonummer) 11 print(k2.saldo, k2.inhaber, k2.kontonummer) 12 print("anzahl der Konten:", Konto.anzKont) 13 14 del k1 #Bobs Konto löschen 15 print("anzahl der Konten:", Konto.anzKont)

Beispiel: Klassenvariable Ausgabe

public, protected, private Name Bezeichnung Bedeutung name public sowohl innerhalb einer Klasse, als auch von außen les- und schreibbar name protected von außen les- und schreibbar, Attribute und Methoden sollten aber nicht benutzt werden name private von außen weder sichtbar, noch nutzbar

Beispiel: private Attribute 1 class Konto: 2 anzkont = 0 #Klassenvariable 3 # Konstruktor 4 def init (self, name, nummer): 5 self. inhaber = name 6 self. kontonummer = nummer 7 self. saldo = 0 8 Konto.anzKont = Konto.anzKont + 1 9 10 11 def einzahlen(self, betrag): 12 self. saldo = self. saldo + betrag 13 14 def del (self): 15 Konto.anzKont = Konto.anzKont - 1

Beispiel: private Attribute 1 from konto3 import Konto 2 print("anzahl der Konten:", Konto.anzKont) 3 4 k1 = Konto("Bob", 19836) 5 k2 = Konto("Alice", 39748) 6 7 k1.einzahlen(500) 8 k2.einzahlen(700) 9 10 print(k1. saldo, k1. inhaber, k1. kontonummer) 11 print(k2. saldo, k2. inhaber, k2. kontonummer) 12 print("anzahl der Konten:", Konto.anzKont) 13 14 del k1 #Bobs Konto löschen 15 print("anzahl der Konten:", Konto.anzKont)

Beispiel: private Attribute

Beispiel: Datenkapselung 1 class Konto: 2 anzkont = 0 #Klassenvariable 3 # Konstruktor 4 def init (self, name, nummer): 5 self. inhaber = name 6 self. kontonummer = nummer 7 self. saldo = 0 8 Konto.anzKont = Konto.anzKont + 1 9 def einzahlen(self, betrag): 10 self. saldo = self. saldo + betrag 11 def getinhaber(self): 12 return(self. inhaber) 13 def getsaldo(self): 14 return(self. saldo) 15 def del (self): 16 Konto.anzKont = Konto.anzKont - 1

Beispiel: Datenkapselung 1 from konto4 import Konto 2 print("anzahl der Konten:", Konto.anzKont) 3 4 k1 = Konto("Bob", 19836) 5 k2 = Konto("Alice", 39748) 6 7 k1.einzahlen(500) 8 k2.einzahlen(700) 9 10 print(k1.getsaldo(), k1.getinhaber()) 11 print(k2.getsaldo(), k2.getinhaber()) 12 print("anzahl der Konten:", Konto.anzKont) 13 14 del k1 #Bobs Konto löschen 15 print("anzahl der Konten:", Konto.anzKont)

Beispiel: Datenkapselung

Prozedural vs Objektorientierung Prozeduren oder Funktionen operieren direkt auf Datenstrukturen. Funktionen und Daten haben keinen Zusammenhalt. prozedurale Programmierung Ansammlung von Variablen, Datenstrukturen und Funktionen, bzw Unterprogrammen. objektorientierte Programmierung Datentypen (Klassen), welche Verhalten (Methoden) mit Daten (Attributen) verbinden. Instanz einer Klasse (Objekt) operiert auf seiner eigenen Datenstruktur. Funktionen (Methoden) und Daten (Attribute) sind fest miteinander verbunden.

Einführungsveranstaltungen Informatik: 11.-12.10.2018 Beginn: Do 11:00 Uhr, Fr 12:00 Uhr Magnushörsaal, Robert-Mayer-Str. 11-15 Bioinformatik: Fr, 12.10.2018, 12:00 Uhr Vor der Neuen Mensa, Campus Bockenheim Wirtschaftsinformatik: Do, 11.10.2018, 11:00 Uhr Hilbertraum (Raum 302), Robert-Mayer-Str. 6-8

Fragen??