7 - Advanced Design and Programming [ID:12207]
50 von 622 angezeigt

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

Teil einer Videoserie :

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

Tags

client interface primitives class design model implementation programming java components method implements superclass interfaces
Einbetten
Wordpress FAU Plugin
iFrame
Teilen