Einführung in abstrakte Klassen im Rahmen der Lehre des Programmierens mit der Programmiersprache Java. (abstrakte Klasse, Template Method Patter), Lektion, Seite 721625
https://www.purl.org/stefan_ram/pub/java_abstrakte_klassen_de (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Java-Kurs

abstrakte Klassen

Abstrakte Klassen in Java

Durch Erweiterung bestehender Basisklassen können für spezielle Zwecke angepaßte Klassen erzeugt werden. Es kann sein, daß eine Klasse nicht mit der Absicht geschrieben wurde, Typ von Exemplaren zu sein, sondern damit sie als Basisklasse für Erweiterungen dient.

Eine Klasse kann mit dem Klassenmodifizierer "abstract" deklariert werden. Eine abstrakte Klassen kann keine Exemplare haben, aber sie kann als Basisklasse verwendet werden.

AbstractClass.java
public final class AbstractClass 
{ public static void main( String args[] ) 
{ new A(); }}
abstract class A {}

Konsole
AbstractClass.java:3: A is abstract; cannot be instantiated 
{ new A(); }}  
^

AbstractClass1.java
public final class AbstractClass1 
{ public static void main( String args[] ){ new B(); }}
abstract class A {} class B extends A {}

Konsole

Abstrakte Klassen dienen als Grundlage einer Erweiterung, aber nicht als Typ von Exemplaren.

Abstrakte Methoden

Durch abstrakte Methoden  kann eine abstrakte Klasse Anforderungen an ihre Erweiterungen stellen: Alle nicht-abstrakten Erweiterungen müssen alle abstrakten Methoden mit einer nicht-abstrakten Methodendeklaration ersetzen.

Eine abstrakte Methodedeklaration sieht aus wie eine Signatur ohne Methodenrumpf. An der Stelle, an der bei einer Methodendeklaration der Methodenrumpf ist, befindet sich ein Semikolon ";". Da ohne Methodenrumpf nicht festgelegt ist, wie eine Signatur implementiert ist, kann die abstrakte Methode natürlich so nicht aktiviert werden. Selbst, wenn es erlaubt wäre, daß Exemplare von abstrakten Klassen erzeugt werden, könnte ein Exemplar dann nicht mehr erzeugt werden, wenn die abstrakte Klasse eine abstrakte Methode enthält, weil das Objekt dann keine Methode hätte, um auf eine entsprechende Nachricht zu reagieren. Daher dürfen abstrakte Methoden auch nur in abstrakten Klassen deklariert werden.

Es ist möglich, daß eine abstrakte Methode einer abstrakten Klasse in einer nichtabstrakten Erweiterung durch eine nichtabstrakte Methodendeklaration mit der gleichen Signatur ersetzen  und dadurch implementiert  wird.

AbstractMethod.java
public final class AbstractMethod 
{ public static void main( final java.lang.String[] args ) 
{ final German german = new German ();  
final English english = new English();  
java.lang.System.out.println( german .hello() ); 
java.lang.System.out.println( english.hello() ); }}
abstract class Language { abstract String hello(); }
final class German extends Language { String hello(){ return "Hallo"; }}
final class English extends Language { String hello(){ return "hello"; }}

System.out
Hallo 
hello

In UML  werden abstrakte Klassen und abstrakte Methoden kursiv geschrieben. In Textmedien, die Kursivschrift nicht zulassen, wird diese gelegentlich dadurch gekennzeichnet, daß der kursiv zu schreibende Text zwischen Schrägstriche geschrieben wird, was natürlich zu Mißverständnissen führen kann, wenn diese Schrägstriche auch anders interpretiert werden könnten.

Language [UML class diagram]
                                        .----------------------. 
| «abstract class» | 
| /Language/ | 
|----------------------| 
|----------------------| 
| /hello() : String/ | 
'----------------------' 

/_\ 
«extends» |  


.---------------------------------------+ 
| | 
.-----------------------. .-----------------------. 
| «class» | | «class» | 
| German | | English | 
|-----------------------| |-----------------------| 
|-----------------------| |-----------------------| 
| hello() : String | | hello() : String | 
'-----------------------' '-----------------------'

Das Schablonenmethode-Muster

Eine abstrakte Methode kann in Methoden ihrer abstrakten Klasse angewendet werden, auch wenn ihr Rumpf in der abstrakten Klasse nicht angegeben wird. Wenn dies in sinnvoller Weise geschieht, so wendet man das Schablonenmethode-Muster  (template method pattern ) an. Hierbei handelt es sich nicht um einen Begriff der Programmiersprache Java, sondern um eine bei der objektorientierten Programmierung allgemein anwendbare Vorgehensweise.

Wenn die abstrakte Klasse "Language" nur als Basisklasse für Sprachen gedacht ist, in denen der Name "Peter" mit der Zeichenfolge "Peter" geschrieben wird und ein Hallo-Gruß einem Namen vorangestellt werden kann, dann ist die Kette "hello() + " Peter"" eine allgemeine Begrüßung von Peter, in der die Schreibweise des Hallo-Grußes noch offengelassen wurde. Diese wird dann erst durch die tatsächlich verwendete nichtabstrakte Erweiterungs-Klasse festgelegt und dann in der Schablonenmethode entsprechend verwendet.

TemplateMethodPattern.java
public final class TemplateMethodPattern 
{ public static void main( final java.lang.String[] args ) 
{ final German german = new German ();  
final English english = new English();  
java.lang.System.out.println( german .helloPeter() ); 
java.lang.System.out.println( english.helloPeter() ); }}
abstract class Language { abstract String hello(); 
String helloPeter(){ return this.hello() + " Peter"; }}
final class German extends Language { String hello(){ return "Hallo"; }}
final class English extends Language { String hello(){ return "hello"; }}

System.out
Hallo Peter 
hello Peter

Die nichtabstrakte Methode "helloPeter" ist die Schablonenmethode  (template method ). Die abstrakte Methode "hello" wird in diesem Zusammenhang auch als Hakenmethode  (hook method ) bezeichnet. Eine Schablonenmethode kann auch mehrere Hakenmethoden verwenden.

Language [UML class diagram]
                                        .-----------------------. 
| «abstract class» | 
| /Language/ | 
|-----------------------| 
|-----------------------| 
| /hello() : String/ | 
| helloPeter() : String | 
'-----------------------' 

/_\ 
«extends» |  


.---------------------------------------+ 
| | 
.-----------------------. .-----------------------. 
| «class» | | «class» | 
| German | | English | 
|-----------------------| |-----------------------| 
|-----------------------| |-----------------------| 
| hello() : String | | hello() : String | 
'-----------------------' '-----------------------'

Template Method Pattern
.-----------------------. 
| «abstract class» | 
| /<AbstractClass>/ | 
|-----------------------| 
|-----------------------| 
| /<hookMethod>/ | 
| <templateMethod> | 
'-----------------------' 

/_\ 
«extends» |  



.-----------------------. 
| «class» | 
| <SubClass> | 
|-----------------------| 
|-----------------------| 
| <hookMethod> | 
'-----------------------'

In einigen Programmiersprachen, wie C++, gibt es Schablonen  (templates ) und mit ihrer Hilfe definierte Methoden könnten ebenfalls als „Schablonenmethoden“ bezeichnet werden. Dieser Begriff ist aber ein anderer Begriff als der Begriff „Schablonenmethode“ im Sinne des hier vorgestellten Schablonenmethode-Musters. Was in einem bestimmten Fall mit „Schablonenmethode“ gemeint ist, muß aus dem Zusammenhang entnommen werden.

Bei Verwendung des Schablonenmethode-Musters  wird das Gerüst eines Verfahrens  vorgegeben, während Details zunächst offengelassen werden, um später durch Methodendeklarationen in Unterklassen ausgefüllt zu werden.

Das Schablonenmethode-Muster  erlaubt es Unterklassen, bestimmte Teile eines Verfahrens zu definieren, ohne daß Änderungen an der Methode nötig werden, die das Verfahren implementiert, und ist somit auch eine Umsetzung des Offen-Geschlossen-Prinzips  unter Verwendung spezieller Eigenschaften der Klassen-Erweiterung  und des Ersetzens.

Dynamische Bindung, Polymorphie

Das Schablonenmethode-Muster kann so nur deswegen verwendet werden, weil die Zuordnung einer Nachricht zu einer Methode in Java  erst zur Laufzeit anhand des momentanen Typs des Exemplars erfolgt. Daher bewirkt die Nachricht "hello()" in der Anweisung "return this.hello() + " Peter";" einmal die Aktivierung der Methode "German#hello()" und einmal die Aktivierung der Methode "Englisch#hello()"—je nach dem Typ des Objektes "this". Hier wird wieder Polymorphie  verwendet, also die Versendung einer Nachricht an einen Empfänger, dessen Typ durch den Versendungsausdruck nicht ganz festgelegt ist.

Nichtabstrakte Basisklassen

Die hier beschriebenen Verfahren und auch die Anwendungen des Schablonenmethoden-Muster  benötigen nicht unbedingt eine abstrakte Basisklasse oder abstrakte Methoden, denn nichtabstrakte Methode einer nichtabstrakten Klasse können genausogut ersetzt werden.

Die Verwendung einer abstrakte Klasse erlaubt es nur auszudrücken, daß diese Klasse für Erweiterungen und nicht für Exemplare gedacht ist. Eine abstrakte Methode macht es nicht nötig, irgendeinen Methodenrumpf als Platzhalter zu verwenden, der gar nicht aktiviert werden soll, und sie macht es auch deutlich, daß diese Signatur ersetzt werden soll.

Statische Methoden

Das hier beschriebene Verfahren kann für statische Methoden nicht angewendet werden. Es ist gar nicht erlaubt, eine statische Methode abstrakt zu deklarieren. Nun könnten auch an die Verwendung nichtabstrakter statischer Methoden gedacht werden, da diese in Erweiterungen verdeckt werden können. Doch die Verdeckung durch eine Erweiterung ist kein Ersetzen, denn die Nachrichten zu statischen Methoden werden auch statisch aufgelöst: Polymorphie funktioniert aber so nicht und das Schablonenmethode-Muster  kann daher auch nicht mit statischen Methoden umgesetzt werden.

Weil statische Methoden verschiedene andere Techniken ebenfalls nicht erlauben, sollten sie möglichst vermieden werden.

abstrakte und finale Klassen im Vergleich

Eine abstrakte Klasse  ist in gewissem Sinne das Gegenstück zu einer finalen Klasse : Eine abstrakte Klasse  kann keine  Exemplare haben und ist nur  dafür gedacht, erweitert zu werden; eine finale Klasse  kann keine  Erweiterungen haben und ist nur  dafür gedacht, Exemplare zu haben.

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram721625 stefan_ram:721625 abstrakte Klasse, Template Method Patter source, source code,sourcecode, Programmier sprache java, Java Programm Java Programmiersprache Java Sprache Java Programmierung Programmieren in Java, Die Programmiersprache Java Javapgrammierung, Java-Programmierung, Java2, Java1.2, Java1.3, Java1.4, Java1.5, Java 2, Java 1.2, Java 1.3, Java 1.4, Java 1.5, Java 1.6, Java 1.7, Java 1.8, Java 8, Java 1.9, Java 9, Java 1.10, Java 10, Tiger, Dolphin, objektorientierte Programmierung, Java sun, , Softwareentwicklung, Software-Entwicklung, Software Entwicklung, Softwareprogrammierung, Software-Programmierung, Software Programmierung, Softwareherstellung, Software-Herstellung, Software Herstellung, Softwareerstellung, Software-Erstellung, Software Erstellung, Softwareengineering, Software-Engineering, Software Engineering, Softwareenginering, Software-Enginering, Software Enginering, Softwaremethodik, Software-Methodik, Software Methodik, Programmiermethodik, Programmier-Methodik, Programmier Methodik, Softwaredidaktik, Software-Didaktik, Software Didaktik, Methodik des Programmierens, Didaktik des Programmierens, Fachdidaktik des Programmierens, Fach-Didaktik des Programmierens, Programmieren, Programmierung, Computer Science, Informatik, Informatik, Informationspädagogik, Informationspaedagogik, Programmierer, programmieren, Quellcode, Quelltext, Quelle, Quellen, Informatiker, Fachinformatiker, Entwickler, mit Stil, mit Stiel, mit Still, , Einführung, Einfuehrung, Einführungen, Einfuehrungen, eLearning-Modul, e-Learning-Modul, eLearning-Module, e-Learning-Module, Kurs Berlin, Kurse Berlin, Kursus, Vortrag, Vorträge, Vortraege, Lehrgang, Lehrgänge, Lehrgaenge, kostenloses Lehrmaterial, kostenlose Lehrmaterialien, Vorlesung, Vorlesungen, Unterrichtseinheit, Unterrichtseinheiten, kostenloses Unterrichtsmaterial im Internet, kostenlose Unterrichtsmaterialien im Internet, Ausbildung, Ausbildungen, für die Ausbildung, Fortbildung, Fortbildungen, Weiterbildung, Weiterbildungen, Schulung Berlin, Schulungen Berlin, Internetschulung, Webschulung, Kursunterlage, Kursunterlagen, trainer Berlin, Didaktik, Informatikunterricht, Primer, Skript FH, Skripte FH, Skriptum FH, Skripts FH, Script FH, Scripte FH, Scriptum FH, Scripts FH, howto, how-to, how to, Lehrbuch, Buch, Bücher, Buecher, Bericht, Crash Kurs Berlin, Crash-Kurs Berlin, Crashkurs Berlin, Report, Sachtext, Sachtexte, Übung, Übungen, Uebung, Uebungen, course, PbclevtugFgrsnaEnz, lecture note, lecture notes, Tutorial, Tutor, Tutorium, Teacher, Lehrer Berlin, Trainer Berlin, Beratung Berlin, Anleitung zum, Anleitungen zum, Einführung, Einfuehrung, Einführungen, Einfuehrungen, Handbuch für, Handbücher, Handbuecher, Support, Diplomarbeit, Facharbeit, Hausarbeit, Hausarbeiten, Werk, Werke, Text, Übungsblatt, Uebungsblatt, Lösung, Loesung, Lösungen, Loesungen, Auflösung, Aufloesung, Auflösungen, Aufloesungen, Facharbeit, Facharbeiten, Forum, Training, manual, Folie, Folien, Lehrmittel, beratung, Definition von, Allgemeine Erklärung, Allgemeine Erklaerung, Allgemeine Erklärungen, Allgemeine Erklaerung, Allgemeine Erklaerungen, Einfache Erklärung einfach, Einfache Erklaerung einfach, Einfache Erklärungen, Einfache Erklaerung, Einfache Erklaerungen, zum Thema, FAQ, FAQs, Konzept, Lernkurs, Lern-Kurs, Lernkurse, Lern-Kurse, eine kurze Erklärung, Begriff, Begriffe, Erklärung zu Begriffen, begriffbestimmung, begriffbestimmung, Begriffsbestimmung, Begriffserklärung, Begriffserklaerung, Wort, Worterklärung, Worterklaerung, Definition, Beispiel, Beispiele, Bedeutung, Bedeutungen, was bedeutet, Begriffsdefinition, für Anfänger, fuer Anfaenger, für Einsteiger, für Beginner, zum selber Lernen, handout, hand out, web based training, WBT, Net Based Training, NBT, computer based training, CBT, virtual learning environment, virtual university, für die Schule, Seminar, Seminare, Vorgehensweise, Pädagogik, Paedagogik, Akademie, Onlineacademie, Onlineakademie, Wissen, Unterrichtsvorbereitung für das Fach, Unterricht, für Lehrer, für Lehrerinnen, Referat, Referate, Hausaufgabe, Hausaufgaben, Tip, Tipp. Tipps und Tricks, Tips und Tricks, Methode, Methoden, Methodik, Funktion, Funktionsweise, Aufbau, Prinzip, Grundlage, Grundlagen, Internetschulung, Unterlage, Unterlagen, Struktur, Frage, Fragen, Antwort, Antworten, Schulunterricht, zum erlernen, was ist das?, wie?, lerne, Onlineausbildung, Onlinelehrgang, Onlinekurs, Onlinebuch, Webbuch, Academy, Fachhochschule, FH, TFH, Hochschule, Universität, Universitaet, Uni, Schule, Berufsschule, Gymnasium, Erste Schritte mit, Dozent, Dozenten, Zusammenfassung, Übersicht, Term, Fachwort, Fachbegriff, Fachbegriffe, Grundbegriff, Grundbegriffe, Lektion, Lektionen, Bedienungsanleitung, Bedienungsanleitungen, Spezialist, Spezialisten, Coaching, Coach, Fachbuch, technologie, Unterschied zwischen, Unterschiede zwischen, lehren, unterrichten, für das Studium, für Studenten, für Studentinnen, für Studierende, für Schüler, für Schülerinnen, Wie kann ich, Wie kann man, Hilfe, selber, erstellen, Erstellung, Beginner, Online-Seminar, Online-Kurs, Online-Schulung, ich, gebrauchsanweisung, gebrauchsanleitung, Bedienungsanweisung, Einweisung, Kurzinfo, Internet-Kurs, Internet-Kurse, Online-Training, Intensiv, Intensivkurs, Vortragsreihe, Präsentation, Grundzüge, Mitschrift, Mitschriften, Verständnis, verstehen, anwenden, Hintergrundwissen, Hintergrund, Hintergründe, content, Funktionsprinzip, Schritt für Schritt; E-Learning; elearning; online learning; Fernlehre, Fernlehrgang, Fernlehrgänge, Referent, Referenten, Fernkurs, Fernkurse, Fernstudium, Fernschule, Fernuniversität, Fernlehrer, Denken, Qualifizierungsmaßnahme, Qualifizierung, Qualifizierungen, Volkshochschulkurs, Volkshochschulkurse, Internet-Learning-Plattform, Online-Learning-Plattform, E-Learning-Plattform, Internetlearning-Plattform, Onlinelearning-Plattform, Elearning-Plattform, jetzt, Kochbuch, einfach erklärt, Kenntnis, Kenntniss, Kenntnisse, deutsche Hilfe, lernen und verstehen; blended learning; courseware, Profi, Profis, professionell, professionelle, professionelles, profesionell, profesionelle, profesionelles, professionel, gekonnt, für Könner, Grundkurs, Leistungskurs, Aufbaukurs, Lehrtext, Lehrtexte, Fachtext, Fachtexte, Ausarbeitung, distance learning, Online Seminar, distance education, Online Tutorium, Online Tutorien, technology-based learning, Computer based learning, CBL, Internet Based learning, IBL, Web based learning, WBL, online-learning, OL, online-training, OT, CAI, Computer Assisted Instruction, CUU, Computerunterstützter Unterricht, Computer-unterstützter Unterricht, Know how, Grundkenntnis, Grundkenntnisse, Kompetenz, Schulungsunterlagen, Insiderwissen, Rat, Lehrerinnen und Lehrer, ABC, Überblick, Arbeitsblatt, Sekundarstufe, Oberstufe, Material, Materialien, Unterrichtsentwurf, Unterrichtsentwürfe, Lerntip, Lerntips, Lerntipp, Lerntipps, ebook, schnell lernen, Lerner, Lernender, Lernende Erwachsenenbildung, Frage und Antwort, Selbststudium, Selbstudium, Umschulung, , kostenlos, kostenlose, kostenloses, kosten los, kosten lose, kosten loses, gratis, free, frei, freie, freies, privat, private, privates, homepage, home-page, home page, website, web site, webpage, web-page, web page, webpages, web-pages, web pages, webseite, Web-Seite, Webseite, Webseiten, Web-Artikel, Web Artikel, online, on-line, on line, download downloaden, down load, or, deutsch, deutsche, deutsches, deutscher, Deutschland, deutschsprachig, deutschsprachige, deutschsprachiges, german, germany, and, uebersicht, Uerbersicht, uebersichten, Uebersichten, Übersicht, übersicht, Übersichten, übersichten, Uebersicht, uebersicht, Uebersichten, uebersichten, Info, Infos zu, Information über, ueber, Informationen über, Auskunft, Auskünfte, Auskuenfte, Dienst, PbclevtugFgrsnaEnz, Angebot, Angebote, Anbieter, server, für, fuer, in, an, keyword, keywords, key word, keywords, internet, internets, net, network, net work, networks, net works, web, www, world wide web, Theorie, Praxis, Anwendung, DV, IT, glossar, fachwörterbuch it-glossar, computer lexikon, Computerlexikon, Computer-Lexikon, Lexikon, computer lexicon, Computerlexicon, Computer-Lexicon, Lexicon, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023 was ist ein, was ist das, was sind, definiere, definition, define, Inhalt, html, xhtml, free im netz, PDF Text, digital, digitale, binär, binäre, elektronisch, elektronische, fachbegriff, fachbegriffe, konzept, Begriff, allgemein, allgemeine, allgemeines, Technik, Datentechnik, Digitaltechnik, Binätechnik, online lesen; , Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd721625, slrprddef721625, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/java_abstrakte_klassen_de