Benutzer-Werkzeuge

Webseiten-Werkzeuge


schule:objekt-orientierte_programmierung

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
Letzte ÜberarbeitungBeide Seiten der Revision
schule:objekt-orientierte_programmierung [2016-07-12 08:11] – [Klassendiagramm für Python] marco.bakeraschule:objekt-orientierte_programmierung [2019-12-24 13:25] – [Sequenzdiagramme] ausgelagert marco.bakera
Zeile 1: Zeile 1:
 +====== Objekt-Orientierte Programmierung (OOP) ======
 +
 +{{:schule:prog:objekte_in_aktion.gif?nolink|}}
 +
 +Bei der Objekt-Orientierten [[Programmieren|Programmierung]] (kurz OOP) wird das Programm in viele kleine Objekte zerlegt, die sich über Nachrichten miteinander unterhalten. Wie ein Objekte aussieht, wird in seinem Bauplan beschrieben. Diesen Bauplan nennt man Klasse. Er beinhaltet die Attribute und die Methoden. Alle Objekte haben diese Attribute und Methoden.
 +
 +Objekt-orientiere Software kann mit Hilfe von UML-Diagramme beschrieben (modelliert) werden. Es gibt insgesamt 14 Diagramme für unterschiedliche Anwendungsgebiete. Am wichtigsten sind die folgenden Diagramme:
 +
 +  * Verhalten (Behavior Diagrams): Use Case Diagram, Activity Diagram, Statechart Diagram, Sequence Diagram, ( selten Timing Diagram)
 +  * Struktur (Structural Diagrams):  Class Diagram, Package Diagram, (selten Object Diagram)
 +
 +Einige dieser Diagramme werden in den folgenden Abschnitten beschrieben.
 +
 +===== Ein Beispiel: Max und Moni =====
 +
 +Es gibt viele Menschen auf der Welt: z.B. Max, 17 Jahre alt und seine Freundin Moni, 18 Jahre alt. Max und Moni unterscheiden sich durch viele Dinge. Aber beide haben einen Namen und ein Alter. Für den Namen würden wir als Datentyp eine Zeichenkette (englisch //string//), für das Alter eine ganze Zahl (englisch //integer//) wählen. Da Max und Moni Menschen sind, können sie natürlich auch etwas machen. Beide können z.B. laufen und essen -- und natürlich noch viel mehr.
 +
 +So sehen die beiden Objekte Max und Moni aus, wenn wir sie in einen Computer stecken würden.
 +
 +^  __max: Mensch__  ^
 +|  name: "Max"\\ alter:17  |
 +|  laufen() \\ essen()      |
 +
 +^  __moni:Mensch__   ^
 +|  name: "Moni"\\ alter:18  |
 +|  laufen() \\ essen()      |
 +
 +Wie wir sehen, haben Max und Moni viele Gemeinsamkeiten. Diese Gemeinsamkeiten wollen wir nun in einem Bauplan - einer Klasse - zusammenfassen. Der Bauplan für Menschen wie Max oder Moni sieht also wie folgt aus:
 +
 +^  Mensch                        ^
 +|  name: string\\ alter:integer  |
 +|  laufen() \\ essen()            |
 +
 +===== Objektdiagramme =====
 +[[wpde>Objektdiagramm|UML-Objektdiagramme]] stellen Objekte und ihren Zustand zu einem bestimmten Zeitpunkt während der Ausführung des Programms dar. 
 +
 +Das [[http://ddi.uni-wuppertal.de/material/materialsammlung/oberstufe/allgemein/abbott.html|Verfahren von Abbott]] beschreibt, wie man aus einer Problemstellung die notwendigen Objekte erhält.
 +
 +==== Aufbau und Zweck ====
 +{{:schule:prog:objektdiagramm_beispiel.png?direct|}}
 +
 +  * Objektdiagramme stellen die Objekte eines Programms zu einem bestimmten Zeitpunkt der Programmausführung dar.
 +  * Name und Typ des Objektes werden an den Kopf eines Kastens geschrieben und unterstrichen.
 +  * Attribute und deren Werte werden darunter angegeben.
 +  * Im Gegensatz zum Klassendiagramm werden keine Methoden eingetragen.
 +  * Beziehungen zwischen den Objekten können eingetragen werden.
 +
 +===== Klassendiagramme =====
 +
 +Häufig stellt man fest, dass es Objekte gibt, die sich in ihren Eigenschaften oder Verhalten (Attributen oder Methoden) ähneln. Diese Gemeinsamkeiten werden in Klassen zusammengefasst. Zusätzlich haben Klassen [[Methoden]], die aufgerufen werden können. Alle Objekte einer Klasse haben den gleichen Aufbau und verhalten sich ähnlich. Man kann sie übersichtlich in [[wpde>Klassendiagramm|Klassendiagrammen]] darstellen.
 +
 +==== Aufbau und Zweck ====
 +
 +{{:schule:prog:klassendiagramm_beispiel.png|}}
 +
 +  * Warum? Um Übersicht über ein komplexes Programm zu erhalten.
 +  * Für jede Klasse wird ein Kasten gezeichnet.
 +  * Der Kasten hat drei Bereiche:
 +    - oben steht der Klassenname
 +    - in der Mitte stehen die Attribute
 +    - unten stehen die Methoden
 +  * Rückgabewerte von Methoden und Datentypen von Attributen und Parametern stehen am Ende und sind durch einen Doppelpunkt getrennt.
 +  * Sichtbarkeiten public/private/protected werden durch +/-/# abgekürzt.
 +  * Beziehungen zwischen Klassen lassen sich darstellen: "besteht aus", "erbt von"
 +
 +=== Klassen in C# und Python ===
 +Klassen werden in C# mit dem Schlüsselwort ''class'' beschrieben. Attribute werden zu Beginn gelistet und haben einen Typ gefolgt von einem Namen. [[Methoden]] haben einen Namen (häufig ein Verb), ggf. Parameter und einen Rückgabewert (''void'', falls es keinen gibt).
 +
 +<code csharp>
 +class Person
 +{
 +  string name;
 +  int alter;
 +  
 +  public string erfrageName()
 +  {
 +    return name;
 +  }
 +  
 +  public int erfrageAlter()
 +  {
 +    return alter;
 +  }
 +  
 +  public void alterFestlegen(int neuesAlter)
 +  {
 +    alter = neuesAlter;
 +  }
 +  
 +  public void laufen()
 +  {
 +    // ...
 +  }
 +  public void essen(Nahrung nahrungsMittel)
 +  {
 +    nahrungsmittel.aufessen();
 +  }
 +}
 +</code>
 +
 +Klassen werden in Python mit dem Schlüsselwort ''class'' beschrieben. Attribute werden im Konstruktor ''<nowiki>__init__(self)</nowiki>'' mit ''self'' an die erzeugte Instanz gebunden. [[Methoden]] haben einen Namen (häufig ein Verb), ggf. Parameter und ggf. einen Rückgabewert.
 +
 +<code python>
 +class Person:
 +
 +    def __init__(self):
 +        self.name = ""
 +        self.alter = 0
 +  
 +    def erfrage_Name(self):
 +        return self.name
 +
 +    def erfrage_Alter():
 +        return self.alter
 +
 +    def alter_Festlegen(self, neues_Alter):
 +        self.alter = neues_Alter
 +
 +    def laufen():
 +        # ...
 +        pass
 +
 +    def essen(self, nahrungsMittel):
 +        nahrungsmittel.aufessen()
 +</code>
 +
 +//Kapitel 8: Objektorientierte Programmierung// in dem Buch //Raspberry Pi programmieren mit Python// beschreibt, wie die Objekt-Orientierte Programmierung in [[Python]] realisiert wurde. 
 +
 +==== Klassendiagramme in Visual Studio ====
 +
 +Visual Studio unterstützt den Entwickler, da es Klassendiagramme nahtlos in die Entwicklungsumgebung integriert.
 +
 +<html>
 +<iframe src="//player.vimeo.com/video/22473499" width="400" height="290" frameborder="0"></iframe>
 +</html>
 +
 +
 +==== Klassendiagramme für Python ====
 +
 +Mit dem Programm ''pyreverse'' können Klassendiagramm aus Python-Quelltext automatisch erstellt werden. Es ist Bestandteil des größeren Paketes [[https://www.pylint.org/|Pylint]], das den Quelltext analysieren und auf Fehler hinweisen kann. 
 +
 +Ein Klassendiagramm wird mit dem folgenden Aufruf erstellt 
 +
 +  pyreverse -o png -f ALL quelltext.py
 +  
 +Die Option ''-o'' gibt das Ausgabeformat und ''-f'' einen Filter an (ALL zeigt alle Zugriffsebenen: //private, public// und //protected//). Leider ermittelt das Programm keine Rückgabewerte und zeigt auch keine Parameter von Methoden an.
 +
 +==== Klassendiagramme in IHK-Prüfungen ====
 +
 +Klassendiagramme kommen häufig in IHK-Prüfungen vor. So z.B. in //2015, Winter, Handlungsschritt 2//.
 +
 +===== Sequenzdiagramme =====
 +
 +→ [[Sequenzdiagramm]]
 +
 +
 +===== Aktivitätsdiagramme =====
 +
 +→ [[Aktivitätsdiagramm]]
 +
 +===== Links =====
 +
 +  * [[https://dzone.com/refcardz/getting-started-uml|UML Reference Card]] - Übersicht der wichtigsten Elemente der UML-Notation.
 +  * [[http://oszhdl.be.schule.de/gymnasium/faecher/informatik/oop/index.htm|Informationen zur OOP]] des Oberstufenzentrum Handel 1.
 +  * [[http://wwwswt.informatik.uni-rostock.de/deutsch/Infothek/uml/kurs/index.php|Einführung in die objektorientierte Modellierung mit UML]] - Kurs der Uni Rostock.
 +  * Werkzeuge zum Zeichnen von UML-Diagrammen sind: [[https://www.draw.io/|draw.io (online)]], [[http://www.umlet.com/changes.htm|UMLet]] oder [[http://plantuml.com/|plantuml]]
 +  * [[http://www.clean-code-developer.de|Die Clean Code Developer Grade]] stellen auf einer Farbskala dar, wie gut du schon objektorientiert programmieren kannst.
  
schule/objekt-orientierte_programmierung.txt · Zuletzt geändert: 2019-12-24 13:29 von marco.bakera