Einstieg In Oop

1.332 Aufrufe

Veröffentlicht am

Veröffentlicht in: Technologie
0 Kommentare
1 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

Keine Downloads
Aufrufe
Aufrufe insgesamt
1.332
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
7
Aktionen
Geteilt
0
Downloads
15
Kommentare
0
Gefällt mir
1
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

Einstieg In Oop

  1. 2. Einstieg in OOP Düsseldorf, 20.08..2007
  2. 3. Klassenbasiertes programmieren mit Flash
  3. 4. OOP Definition <ul><li>Die objektorientierte Programmierung (kurz OOP ) ist ein auf dem Konzept der Objektorientierung basierendes Programmierparadigma, welches Flexibilität und Wiederverwendbarkeit von Programmen fördert. </li></ul><ul><li>Die Grundidee der objektorientierten Programmierung ist, Daten und Funktionen, die auf diese Daten angewandt werden können, möglichst eng in einem sogenannten Objekt zusammenzufassen und nach außen hin zu kapseln , so dass Methoden fremder Objekte diese Daten nicht versehentlich manipulieren können. </li></ul><ul><li>Im Gegensatz dazu beschreibt das vor der OOP vorherrschende Paradigma eine strikte Trennung von Funktionen (Programmcode) und Daten, dafür aber eine schwächere Strukturierung der Daten selbst. </li></ul>
  4. 5. Warum objektorientiert programmieren? <ul><li>Software lässt sich schneller entwickeln </li></ul><ul><li>ist leichter zu warten </li></ul><ul><li>weniger Fehleranfällig sowie einfacher zu debuggen </li></ul><ul><li>Source Code ist übersichtlicher </li></ul><ul><li>Wiederverwendbar (Frameworks) </li></ul>
  5. 6. Was zeichnet objektorientierte Programmierung aus? <ul><li>Abstraktion Ein Objekt verkörpert einen Arbeiter der verschiedene Eigenschaften hat und verschiedene Aufgaben übernehmen kann. </li></ul><ul><li>Kapselung Jedes Objekt ist einer Kapsel, das heißt Eigenschaften und Verhaltens- weisen die in dem Objekt implementiert werden überschreiben nicht etwaig gleichlautende Eigenschaften außerhalb des Objektes. </li></ul><ul><li>Vererbung Es können allgemeine Verhaltensweisen und Eigenschaften von Objekten in einen Oberklasse heraus generalisiert werden. So kann doppelter Code auf leichte Weise vermieden werden. </li></ul><ul><li>Polymorphie Klassen die von einer Oberklasse allgemeine Eigenschaften und Verhaltens- weisen geerbt hat können diese überschreiben um so ein spezialisiertes Verhalten zu erzeugen. </li></ul>
  6. 7. Die Klasse <ul><li>Klassen </li></ul><ul><li>Klassen sind sozusagen Objektfabriken, wir erzeugen ein Objekt von einer Klasse. Analogie in der Natur sind die Gattungen, von der Gattung Fisch werden Fischobjekte erzeugt. </li></ul><ul><li>Beispiel: </li></ul><ul><ul><li>class User { </li></ul></ul><ul><ul><li>public function User() { </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><li>Einfaches Klassenkonstrukt mit dem sogenannten Konstruktor der Klasse. </li></ul><ul><li>Erklärung: Konstruktoren besitzen denselben Namen wie die Klasse. </li></ul><ul><li>Einfache Erzeugung einer Instanz der Klasse User: </li></ul><ul><li>var carlos : User = new User(); </li></ul><ul><li>var simone : User = new User(); </li></ul><ul><li>var user3 : User = new User(); </li></ul>
  7. 8. Die Eigenschaften <ul><li>Eigenschaft </li></ul><ul><li>Eigenschaft Variable eines Objektes </li></ul><ul><li>Beispiel: </li></ul><ul><ul><li>class User { </li></ul></ul><ul><ul><li>private var _name : String; </li></ul></ul><ul><ul><li>public function User() { </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><li>Die Eigenschaft _name hat keinen Wert und ist private. Möglich wäre auch </li></ul><ul><li>public var _name : String; </li></ul><ul><li>Wurde in diesem Beispiel aber auf private gesetzt um eine Manipulation von außen zu verhindern. </li></ul>
  8. 9. Methoden: Getter / Setter Methode (implizit) <ul><li>Methode </li></ul><ul><li>Methode eines Objektes, Verhaltensweise, Nachricht) </li></ul><ul><li>Beispiel: </li></ul><ul><ul><li>class User { </li></ul></ul><ul><ul><li>private var _name : String; </li></ul></ul><ul><ul><li>public function User() { </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>public function set name(name : String) : Void { </li></ul></ul><ul><ul><li>_name = name; </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>public function get name() : String { </li></ul></ul><ul><ul><li>return _name; </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>} </li></ul></ul>
  9. 10. Methoden: Getter / Setter Methode (implizit) <ul><li>Setter ausführen. </li></ul><ul><li>var carlos : User = new User(); </li></ul><ul><li>carlos.name = ‘ Carlos Ulluoa ‘; </li></ul><ul><li>var simone : User = new User(); </li></ul><ul><li>simone.name = ‘Simone Meier‘; </li></ul><ul><li>var user3 : User = new User(); </li></ul><ul><li>user3. name = ‘Fake User‘; </li></ul><ul><li>Getter ausführen. </li></ul><ul><li>trace(carlos.name); </li></ul><ul><li>trace(simone.name); </li></ul><ul><li>trace(user3.name); </li></ul>
  10. 11. Methoden: Einfache Methode <ul><li>Beispiel: </li></ul><ul><ul><li>class User { </li></ul></ul><ul><ul><li>private var _name : String; </li></ul></ul><ul><ul><li>public function User() { </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>public function set name(name : String) : Void { </li></ul></ul><ul><ul><li>_name = name; </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>public function get name() : String { </li></ul></ul><ul><ul><li>return _name; </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>public function sayHello() : Void { </li></ul></ul><ul><ul><li>trace( 'Hi my name is: ' +  _name ); </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><li>Methode „sayHello“ ausführen: </li></ul><ul><li>carlos.sayHello(); </li></ul><ul><li>simone.sayHello(); </li></ul><ul><li>user3.sayHello(); </li></ul>
  11. 12. Methode != Funktion <ul><li>Methoden </li></ul><ul><li>ist eine Routine die fast immer zu einer Klasse oder einem Objekt gehört und auch von einem Objekt oder Instanz aufgerufen wird. </li></ul><ul><li>Funktion </li></ul><ul><li>Erstellt keine Objekte und gehört auch zu keiner Klasse oder Instanz. Steht meist alleine im Raum und stammt aus der „prozeduralen“ Programmierung. </li></ul>
  12. 13. Instanzen - eine kurze Beschreibung von &quot;new&quot; <ul><li>Definitionen </li></ul><ul><li>Klasse: Eine Vorlage die benutzt wird um Eigenschaften eines Objektes zu setzen. </li></ul><ul><li>Instanz: Ein Objekt erstellt mit Hilfe einer Klasse. </li></ul><ul><li>Beispiel: </li></ul><ul><li>var carlos : User = new User(); </li></ul><ul><li>Klasse: User </li></ul><ul><li>Instanz: carlos </li></ul>
  13. 14. Datenkapselung <ul><li>Als Datenkapselung bezeichnet man in der Programmierung das Verbergen von Implementierungsdetails. </li></ul><ul><li>Der direkte Zugriff auf die interne Datenstruktur wird unterbunden und erfolgt statt dessen über definierte Schnittstellen. </li></ul><ul><li>Objekte können den internen Zustand anderer Objekte nicht in unerwarteter Weise lesen oder ändern. Ein Objekt hat eine Schnittstelle, die darüber bestimmt, auf welche Weise mit dem Objekt interagiert werden kann. </li></ul>
  14. 15. Datenkapselung <ul><li>Beispiel: </li></ul><ul><ul><li>class Couple { </li></ul></ul><ul><ul><li>private var _male:User; </li></ul></ul><ul><ul><li>private var _female:User; </li></ul></ul><ul><ul><li>public function Couple() { </li></ul></ul><ul><ul><li>_male = new User(); </li></ul></ul><ul><ul><li>_male.name = ‘Roland Meier ‘; </li></ul></ul><ul><ul><li>_female = new User(); </li></ul></ul><ul><ul><li>_female.name = ‘Heike Schmidt ‘; </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>public function married():Void { </li></ul></ul><ul><ul><li>trace(_male +‘ist verheiratet mit ‘ + _female); </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>} </li></ul></ul>
  15. 16. Feedback <ul><li>Verschiedene Objekte kommunizieren über einen Nachricht-Antwort-Mechanismus, der zu Veränderungen in den Objekten führt und neue Nachrichtenaufrufe erzeugt. Dafür steht die Kopplung als Index für den Grad des Feedback. </li></ul>
  16. 17. Vererbung <ul><li>Durch Vererbung können neue Klassen definiert werden, die auf einer (Super-)Klasse basieren. </li></ul><ul><li>Hierbei stellt die neue Klasse eine Erweiterung ihrer Oberklasse dar. Die neue Unterklasse (subclass) erbt alle Eigenschaften (= Daten und Methoden) der Oberklasse (super class). Zusätzlich können weitere Datenfelder und Methoden definiert werden. Statt die Unterklasse völlig neu zu implementieren, verwendet man die Implementierung der Oberklasse, welche die Eigenschaften vererbt. </li></ul><ul><li>In der erweiterten Klasse können neue Datenfelder und Methoden definiert werden. Man darf auch Methoden der Oberklasse durch neue Methoden ersetzen. </li></ul><ul><li>Erstellen einer Subklasse </li></ul><ul><li>class KlassenName extends NameSuperklasse   {.....} </li></ul><ul><li>Die Vererbung erfolgt über das Schlüsselwort extends . </li></ul><ul><li>Wenn eine Klasse von einer anderen Klasse abgeleitet wird, erbt die untergeordnete Klasse automatisch alle Eigenschaften (Attributvariablen) und das gesamte Verhalten (Methoden) der übergeordneten Klasse. Hierbei ist zu beachten, dass die Vererbung immer additiv ist. Es ist nicht möglich, von einer Klasse zu erben und weniger zu erhalten als die übergeordnete Klasse enthält. </li></ul>
  17. 18. Vererbung <ul><li>Die Vererbungsbeziehung beinhaltet eine Aufrufbeziehung in Pfeilrichtung von der Unterklasse zur Oberklasse. </li></ul><ul><li>Vorteile: </li></ul><ul><li>Die Implementierung von Auto kann in AutoBunt und PolizeiAuto weiter verwendet werden. Zusätzliche Eigenschaften werden in den Unterklassen implementiert. </li></ul>
  18. 19. Polymorphie <ul><li>Verschiedene Objekte können auf die gleiche Nachricht unterschiedlich reagieren. </li></ul><ul><li>Wird die Zuordnung einer Nachricht zur Reaktion auf die Nachricht erst zur Laufzeit aufgelöst, </li></ul><ul><li>dann wird dies auch späte Bindung genannt. </li></ul>
  19. 20. Polymorphie <ul><li>Beispiel: </li></ul><ul><ul><li>class Female { </li></ul></ul><ul><ul><li>public function Couple() { </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>public function sayHello ():Void { </li></ul></ul><ul><ul><li> trace(&quot;Hello, my name is &quot;+name+&quot; and I am a Female.&quot;); </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>class Female { </li></ul></ul><ul><ul><li>public function Couple() { </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>public function sayHello ():Void { </li></ul></ul><ul><ul><li> trace(&quot;Hello, my name is &quot;+name+&quot; and I am a male.&quot;); </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>} </li></ul></ul>
  20. 21. Fragen, Anregungen und Kritik?
  21. 22. Ansprechpartner <ul><li>Christian Sobolewski </li></ul><ul><li>Flash Developer </li></ul><ul><li>Graf-Adolf-Platz 1-2 </li></ul><ul><li>40213 Düsseldorf </li></ul><ul><li>Fon +49.211.540.38.301 </li></ul><ul><li>Fax +49.211.540.38.150 </li></ul><ul><li>[email_address] </li></ul><ul><li>www.add2.de </li></ul>

×