Abstrakte Klasse gegen konkrete Klasse
Die meisten der modernen objektorientierten Programmiersprachen wie Java und C # sind klassenbasiert. Sie erreichen die objektorientierten Konzepte wie Einkapselung, Vererbung und Polymorphie durch den Einsatz von Klassen. Klassen sind eine abstrakte Darstellung von Objekten der realen Welt. Klassen können je nach Implementierungsgrad ihrer Methodenfunktionalitäten entweder konkret oder abstrakt sein. Eine konkrete Klasse implementiert alle ihre Methoden vollständig. Eine abstrakte Klasse kann als eingeschränkte Version einer regulären (konkreten) Klasse betrachtet werden, wobei sie teilweise implementierte Methoden enthalten kann. In der Regel werden konkrete Klassen als (nur) Klassen bezeichnet.
Was ist die konkrete Klasse??
Die Standardklasse ist eine konkrete Klasse. Das Schlüsselwort class wird zum Definieren von Klassen verwendet (z. B. in Java). Und normalerweise werden sie einfach als Klassen bezeichnet (ohne das Adjektivbeton). Konkrete Klassen zeigen die konzeptuelle Darstellung von Objekten der realen Welt. Klassen haben Eigenschaften, die als Attribute bezeichnet werden. Attribute werden als globale Variablen und Instanzvariablen implementiert. Methoden in den Klassen repräsentieren oder definieren das Verhalten dieser Klassen. Methoden und Attribute von Klassen werden als Mitglieder der Klasse bezeichnet. In der Regel wird die Kapselung dadurch erreicht, dass die Attribute als privat deklariert werden, während öffentliche Methoden erstellt werden, mit denen auf diese Attribute zugegriffen werden kann. Ein Objekt ist die Instanz einer Klasse. Vererbung ermöglicht dem Benutzer das Erweitern von Klassen (als Unterklassen bezeichnet) von anderen Klassen (als Superklassen bezeichnet). Der Polymorphismus ermöglicht es dem Programmierer, ein Objekt einer Klasse anstelle eines Objekts seiner Oberklasse zu ersetzen. Normalerweise werden die in der Problemdefinition gefundenen Nomen direkt zu Klassen im Programm. In ähnlicher Weise werden Verben zu Methoden. Öffentlich, privat und geschützt sind die typischen Zugriffsmodifizierer für Klassen.
Was ist abstrakte Klasse??
Abstrakte Klassen werden mit dem Schlüsselwort Abstract deklariert (z. B. in Java). In der Regel können abstrakte Klassen (ABC - Abstract Base Classes) nicht instanziiert werden (eine Instanz dieser Klasse kann nicht erstellt werden). Abstrakte Klassen sind also nur dann von Bedeutung, wenn die Programmiersprache Vererbung unterstützt (Fähigkeit zum Erstellen von Unterklassen durch Erweitern einer Klasse). Abstrakte Klassen repräsentieren normalerweise ein abstraktes Konzept oder eine Entität mit teilweiser oder keiner Implementierung. Abstrakte Klassen fungieren daher als übergeordnete Klassen, von denen untergeordnete Klassen abgeleitet werden, sodass die untergeordneten Klassen die unvollständigen Features der übergeordneten Klasse gemeinsam nutzen und Funktionen hinzugefügt werden können, um sie abzuschließen.
Abstrakte Klassen können abstrakte Methoden enthalten. Unterklassen, die eine abstrakte Klasse erweitern, können diese (vererbten) Abstract-Methoden implementieren. Wenn die untergeordnete Klasse alle derartigen Abstract-Methoden implementiert, wird sie zu einer konkreten Klasse. Wenn dies nicht der Fall ist, wird die untergeordnete Klasse auch zu einer abstrakten Klasse. Das bedeutet alles, wenn der Programmierer eine Klasse als Abstract nominiert, sagt sie, dass die Klasse unvollständig sein wird und Elemente enthalten werden, die von den erbenden Unterklassen vervollständigt werden müssen. Dies ist eine gute Möglichkeit, einen Vertrag zwischen zwei Programmierern zu erstellen, wodurch die Aufgaben bei der Softwareentwicklung vereinfacht werden. Der Programmierer, der Code schreibt, um zu erben, muss die Methodendefinitionen genau befolgen (natürlich kann sie auch eine eigene Implementierung haben)..
Was ist der Unterschied zwischen abstrakter Klasse und konkreter Klasse??
Abstrakte Klassen haben in der Regel eine teilweise oder keine Implementierung. Auf der anderen Seite haben konkrete Klassen immer eine vollständige Umsetzung ihres Verhaltens. Im Gegensatz zu konkreten Klassen können abstrakte Klassen nicht instanziiert werden. Daher müssen abstrakte Klassen erweitert werden, um sie nützlich zu machen. Abstrakte Klassen können abstrakte Methoden enthalten, konkrete Klassen jedoch nicht. Wenn eine abstrakte Klasse erweitert wird, werden alle Methoden (sowohl abstrakte als auch konkrete) vererbt. Die geerbte Klasse kann eine oder alle Methoden implementieren. Wenn nicht alle abstrakten Methoden implementiert sind, wird diese Klasse auch zu einer abstrakten Klasse.