Klassen- und Schnittstellenentwurf, Kernthema, Herausforderung eines guten Entwurfs, guten
Programms. Es gibt eigentlich drei wesentliche Aspekte, die man hier beachten muss. Das eine
ist zu verstehen, dass man zwei Schnittstellen hat, in einer Klasse üblicherweise, und dann
eine diese zwei Schnittstellen verbindende Implementierung. Die erste Schnittstelle ist
relativ klar, das kennen Sie üblicherweise in Java zum Beispiel als die öffentlichen
Methoden, die Sie aufrufen können, als die Klassenschnittstelle. Dann gibt es aber noch,
das haben Sie vielleicht schon letztes Mal herausgehört, etwas das wird die Vererbungsschnittstelle
genannt. Das sind genau jene Methoden, die machen eine Schnittstelle aus, die vom Programmierer
einer Klasse entwickelt werden, definiert werden, um dann von Unterklassen genutzt zu
werden. Also innerhalb der Oberklassen- Unterklassenbeziehung stellt diese eine Schnittstelle dar. Und in
einem guten Entwurf wird die genauso explizit betrachtet und gehandhabt wie die normale,
nach außen gerichtete öffentliche Schnittstelle. Ja, und zwischen beidem steckt halt der Code
einer Klasse. Zum Beispiel sieht Kontrollfluss häufig so aus, dass sie auf einem Objekt über
eine Methode einer Oberklasse, den Kontrollfluss dieses Objektes erreicht, und dann intern
ein bisschen das Ganze hin und her geht und plötzlich fällt man in Anführungszeichen
von dem Code der Oberklasse innerhalb dieses Objekts im Code der Unterklasse, weil halt
eine Methode aufgerufen wurde, die in einer Unterklasse überschrieben wurde. Und da sind
Sie dann über die Vererbungsschnittstelle von der Oberklasse in die Unterklasse vom Code
her gewechselt. Und genau wie man das macht, das ist das heutiges Thema, das Kern der
Strukturierung Ihres Codes. So, wenn wir uns jetzt Klassen zuwenden, als im Kernstück,
wo man Code schreibt in Java in objektorientierter Programmierung, dann müssen wir uns erstmal
klar machen, dass es klassisch zwei Perspektiven gibt. Das eine ist die Modellierungsperspektive
und das andere ist die Implementierungs- oder technologische Perspektive. Nicht ganz zufällig
fallen die auch zusammen mit unterschiedlichen Schools of Thought, Philosophien. Die Modellierungsperspektive
lange bevor es Java gab, ist die Simula 67 Perspektive, also eine nordische Programmiersprache,
der es darum geht, die Welt zu modellieren, ging die Welt zu modellieren. Und dann gibt's
die technologische Perspektive, also Simula war eine der ersten objektbasierten, objektorientierten
Programmiersprachen, dann gibt's die technologische Perspektive, die mehr auf technische Fragen
wie Kapselung und Verstecken von Informationen abgezielt hat und das ist die amerikanische
Smalltalk Erbe. Konkret brauchen wir beides. Wenn wir nicht wissen, warum wir Klassen schreiben,
brauchen wir sie nicht zu schreiben, warum wissen wir sie? Naja, weil die Klassen irgendeinen
fachlichen Zweck erfüllen sollen. Fotos haben einen fachlichen Zweck im Kontext der Anwendung,
wir wollen irgendetwas aus der physischen realen Welt oder auch einer gedachten virtuellen
Welt repräsentieren, um damit irgendwie Mehrwert für Nutzer zu schaffen. Damit werden Objekte
halt dann im Computer Repräsentation von irgendetwas aus einer Domäne, aus der Fachlichkeit
und eine Klasse ist das Implementierungsvehikel, um die gemeinschaftlichen Eigenschaften gleichartiger
Objekte zu erfassen. Und in der technologischen Perspektive macht man das halt, um Felder zusammenzufassen
und zu kapseln und besser wiederverwendbar und besser evolvierbar zu machen. Und das stimmt
nicht ganz, wir betrachten eigentlich immer beides, weil ohne Modellierung, ohne irgendeine
Entsprechung in einer realen oder virtuellen Welt brauchen wir gar nichts zu programmieren,
weil wir keinen Zweck haben. Aber ohne gute Technologie geht es halt auch nicht.
So, die Kernkonzepte, wenn man jetzt drüber nachdenkt, wie erfassen wir was aus der realen
Welt und wie machen wir was technisch sauber, sind Schnittstelle, Abstraktikklasse und
Implementierungsklasse. Und die Unterscheidung ist halt, eine Schnittstelle definiert nur
Verhalten. Sagt nicht, wie das umgesetzt wird, wie der Code, wie die Algorithmen dahinter
aussehen, sondern definiert nur Verhalten. Ist somit die abstrakte Beschreibung von Objektverhalten.
Und jetzt sehen Sie vielleicht schon, ja, in Java kann man das über eine Java-Schnittstelle
realisieren, man kann es in Java auch über eine abstrakte Oberklasse realisieren, das
sind dann Umsetzungsmittel. Mir geht es hier darum, dass Sie logisch sich überlegen, hier
gibt es schlichtweg eine Schnittstelle, ohne konkrete Implementierung dahinter und von
Presenters
Zugänglich über
Offener Zugang
Dauer
01:07:03 Min
Aufnahmedatum
2019-11-11
Hochgeladen am
2019-11-11 23:09:03
Sprache
de-DE