Klasse (Objektorientierung)

Beispielklasse Mitarbeiter (oben) mit zwei Instanzen (unten rechts und links).

Unter einer Klasse (auch Objekttyp genannt) versteht man in der objektorientierten Programmierung ein abstraktes Modell bzw. einen Bauplan für eine Reihe von ähnlichen Objekten.

Die Klasse dient als Bauplan für die Abbildung von realen Objekten in Softwareobjekte und beschreibt Attribute (Eigenschaften) und Methoden (Verhaltensweisen) der Objekte. Verallgemeinernd könnte man auch sagen, dass eine Klasse dem Datentyp eines Objekts entspricht.

Vererbung

Klassen können miteinander in hierarchischen Beziehungen stehen und zu komplexen Strukturen werden. Die Gesetzmäßigkeiten, nach denen diese gebildet werden, beschreibt das grundlegende Konzept der Vererbung. Hier sind weiterhin die Begriffe Basisklasse und abgeleitete Klasse von Bedeutung, um die Verhältnisse der Klassen untereinander zu charakterisieren. Dabei beschreibt die Basisklasse allgemeine Eigenschaften, ist also eine Verallgemeinerung der abgeleiteten Klassen. Diese sind somit Spezialisierungen der Basisklasse.

Beispiel: Basisklasse Kraftfahrzeug ist Verallgemeinerung der abgeleiteten Klassen (Spezialisierungen) Auto, LKW, Motorrad und Traktor.

Dabei „erben“ die abgeleiteten Klassen alle Eigenschaften und Methoden der Basisklasse (d. h., ein Motorrad hat alle Eigenschaften eines Kraftfahrzeugs, und man kann alles mit ihm machen, das man mit einem Kraftfahrzeug machen kann). Zusätzlich führt die abgeleitete Klasse zusätzliche Eigenschaften und Methoden ein, die bei ihren Objekten möglich sind. Das Motorrad hat z. B. einen Gepäckträger, ein Auto nicht, dafür aber einen Kofferraum.

Programmierstil

In vielen Programmiersprachen ist es üblich, dass der Name einer Klasse mit einem Großbuchstaben beginnt und in Camel-Case-Notation geschrieben wird (Namenskonventionen von Java, JavaScript, .NET, Objective-C, PHP, Perl, Python, Swift). Die Namen der Variablen dagegen werden bei manchen Programmiersprachen mit einem Kleinbuchstaben begonnen.

Vergleich mit Verbund

Ähnlich der Klasse ist der Verbund ein Werkzeug zum Verwalten von zusammengehörigen Attributen. Er ist ein zusammengesetzter Datentyp aus verschiedenen anderen Datentypen. Die einzelnen Komponenten können als Attribute des neuen Verbundtyps betrachtet werden. Je nach Programmiersprache können sich Verbund und Klasse mehr oder weniger stark unterscheiden. Beispiele für Unterschiede sind:

  • Eigene Methoden und welche Arten möglich sind
  • Speicherverwaltung
  • Verhalten bei Zuweisung (nur Referenz, flache Kopie, tiefe Kopie)
  • Nutz- und Definierbarkeit von Standardoperatoren
  • Vererbbarkeit
  • Unterstützung von Sichtbarkeiten, die nicht public sind
  • Unterstützung von Unions
  • Als Attribut zulässige Arten von Typen (Klassen, zusammengesetzte Typen, einfache Typen)

Beispiele

C#

Als Beispiel soll eine Lampe dienen. Eine Lampe kann verschiedene Eigenschaften (Attribute) besitzen, zum Beispiel Farbe, Gewicht und ob sie leuchtet. Da man mit den Eigenschaften Farbe und Größe wenig operieren kann, wäre eine sinnvolle Verhaltensweise demnach eine Lichtschalter-Methode, die den jeweiligen Zustand von an und aus bestimmt.

Beispiel-Implementierung in C#:

class Lampe {
    // Eigenschaften
    Color gehaeusefarbe;
    double gewicht;
    Color lichtfarbe;
    double helligkeit;
    bool istEingeschaltet;

    // Methoden
    void einschalten() {
        istEingeschaltet = true;
    }

    void ausschalten() {
        istEingeschaltet = false;
    }
}

Das Konzept der Vererbung lässt sich daran zeigen, dass es verschiedene Arten von Lampen gibt, z. B. Straßenlaternen, Taschenlampen oder Autoscheinwerfer. Diese speziellen Lampenarten sind dann Unterklassen der Klasse Lampe, d. h. sie besitzen zusätzliche Attribute (z. B. Taschenlampe.maximaleLeuchtdauer, Autoscheinwerfer.istKippbar) und Methoden (z. B. Taschenlampe.batterieLaden(), Autoscheinwerfer.fernlichtEinschalten()). Die Attribute und Methoden der Klasse Lampe werden übernommen und gelten auch für die Unterklassen. Für diese speziellen Klassen ist die Klasse Lampe eine Basisklasse.

In C#:

// Unterklassen der Klasse Lampe

class Taschenlampe : Lampe {
    // zusätzliche Eigenschaften
    double maximaleLeuchtdauer;

    // zusätzliche Methoden
    void batterieLaden() {
        // Implementierung der Methode
    }
}

class Autoscheinwerfer : Lampe {
    // zusätzliche Eigenschaften
    bool istKippbar;

    // zusätzliche Methoden
    void fernlichtEinschalten() {
        // Implementierung der Methode
    }
}

Eine Klasse kann als Datentyp verwendet werden (z. B. für Attribute oder Methoden-Parameter).

Beispiel: Ein Parlament besteht aus mehreren Abgeordneten, die Person sowie meistens Mitglieder einer Partei sind. Die Klasse Abgeordneter ist als Unterklasse der Klasse Person umgesetzt. Jedes Parlament hat einen Abgeordneten als Vorsitzenden. Die Klasse Parlament kann eine Methode setzeVorsitzenden(...) definieren mit diesem Abgeordneter als Parameter; sie setzt das Attribut vorsitzender auf den angegebenen „Wert“. Zusätzlich wird eine Methode gibAnzahlDerAbgeordneten(...) implementiert, die einen Parameter der Klasse Partei erhält und die Anzahl der Abgeordneten dieser Partei zurückgibt.

Mögliche C#-Implementierung:

class Person {
    // Eigenschaften
    string vorname;
    string nachname;
    Date geburtsdatum;
    List<string> nationalitaeten;
    string MailAdresse;
    string Postanschrift;
}

class Partei {
    // Eigenschaften
    string name;
    List<Person> mitglieder;
}

// Unterklasse der Klasse Person
class Abgeordneter: Person {
    // Eigenschaften
    Partei partei;

    // Methoden
    Partei gibPartei() {
        return partei;
    }
}

class Parlament {
    // Eigenschaften
    Abgeordneter vorsitzender;
    int maximalGroesse;

    // Liste von Objekten der Klasse Abgeordneter
    List<Abgeordneter> listeAbgeordnete = new List<Abgeordneter>();

    // Methoden
    void setzeVorsitzenden(Abgeordneter abgeordneter) {
        vorsitzender = abgeordneter;
    }

    int gibAnzahlDerAbgeordneten(Partei partei) {
        int anzahl = 0;

        foreach (Abgeordneter einAbgeordneter in listeAbgeordnete) {
            if (einAbgeordneter.gibPartei() == partei) {
                anzahl = anzahl + 1;
            }
        }

        return anzahl;
    }
}

Ruby

Das folgende Beispiel ist in der Programmiersprache Ruby geschrieben:

# Die Klasse "Fahrzeug" ist die Basisklasse.
class Fahrzeug
    def bewegen()
        puts "Fahrzeug wird bewegt."
    end
end

# Die Klasse "Auto" ist die abgeleitete Klasse.
class Auto < Fahrzeug
    def bewegen()
        puts "Auto wird bewegt."
    end
end

def fahren(fahrzeug)
    # zur Verdeutlichung der sog. "Polymorphie"
    fahrzeug.bewegen()
end

# Hauptprogramm
fahrzeug = Fahrzeug.new
auto = Auto.new

fahrzeug.bewegen()
auto.bewegen()

# Polymorphie: Methode 'fahren'
fahren(fahrzeug)
fahren(auto)

Dieses Programm definiert eine Klasse Fahrzeug und eine davon abgeleitete Klasse Auto.

Die Basisklasse besitzt eine Methode namens bewegen(), die den Text „Fahrzeug wird bewegt.“ auf dem Computerbildschirm ausgibt. Die von Fahrzeug abgeleitete Klasse Auto hat ebenfalls eine Methode bewegen() und überschreibt die Methode von Fahrzeug. Die von ihr erzeugte Ausgabe lautet „Auto wird bewegt.“.

Anschließend folgt die Definition einer eigenständigen Funktion fahren(), die ein Objekt der Basisklasse als Argument bekommt. Auf diesem Objekt wird die Methode bewegen() aufgerufen.

Schließlich folgt das Hauptprogramm, das sowohl ein Objekt der Basisklasse (fahrzeug), als auch der abgeleiteten Klasse (auto) erzeugt, und auf beide zuerst bewegen() aufruft und danach mit Hilfe von fahren() ebenfalls noch einmal bewegen() für beide Objekte ausführt.

Wird dieses Programm ausgeführt, so erscheint auf dem Bildschirm:

Fahrzeug wird bewegt.
Auto wird bewegt.
Fahrzeug wird bewegt.
Auto wird bewegt.

Es ist zu erkennen, dass, obwohl die Funktion fahren() für ein Fahrzeug definiert ist, sie auch für ein Auto funktioniert und die überschriebene Methode aufgerufen wird, d. h., sie funktioniert für Objekte der Basisklasse sowie für Objekte aller abgeleiteter Klassen. Diese erben die Eigenschaften und „können“ somit auch alles, was die Basisklasse „kann“. Dieses im Allgemeinen erwünschte Verhalten nennt man Polymorphie.

Erweiterung

Eine Erweiterung bzw. Abstraktion dieses Konzepts findet sich in dem Modell der abstrakten Klassen und der Metaklassen.

Möglich ist auch eine sogenannte anonyme Klasse. Dabei wird eine Klasse nur an genau der Stelle beschrieben, an der ein Objekt von ihr erzeugt wird. Sie ist nicht getrennt (zum Beispiel in einer eigenen Datei) als eigenständige Komponente im Quellcode beschrieben und kann daher auch von anderen Programmteilen nicht wiederverwendet oder gezielt angesprochen werden. Die Klasse erhält auch keinen eigenen Namen. In der Regel erbt sie jedoch von einer anderen, diese beschreibt dann die Haupteigenschaften und -methoden des Objekts für seine spätere Verwendung. Die abgeleitete, namenlose Klasse modifiziert das Verhalten meist nur geringfügig.

Ein Beispiel in Java:

import java.awt.Button;
import java.awt.event.ActionListener;

// Erzeugen eines Button-Objekts, speichern in hilfeButton
// "Hilfe" ist die Beschriftung des Buttons
Button hilfeButton = new Button("Hilfe");

// Zum Button wird ein Objekt hinzugefügt, das eine Methode "actionPerformed"
// besitzt. Die Methode wird aufgerufen, wenn der Button angeklickt wird.
hilfeButton.addActionListener(
    new ActionListener() {
        void actionPerformed(ActionEvent e) {
            System.out.println("Hilfetext");
        }
    } // end anonymous class
);

Es wird mit new ein Objekt erzeugt, das in Hauptsache einem java.awt.event.ActionListener entspricht (zwar keine Basisklasse, aber ein Interface). Als spezielle Verhaltensweise genau diesen Objekts wird die Methode actionPerformed so überschrieben, dass sie Hilfetext auf dem Bildschirm ausgibt. Da ein spezialisiertes Verhalten definiert wurde, ist das Objekt von einer abgeleiteten Klasse, also nicht von ActionListener direkt – es wurde aber kein Klassenname angegeben. Im nachfolgenden Programm kann das Objekt nur noch als ActionListener verwendet werden (siehe Polymorphie).

Mitunter wird ähnlich einer anonymen Klasse auch eine innere Klasse definiert. Unterschied zu einer „normalen“ Klasse ist zunächst der Sichtbarkeitsbereich, eine innere Klasse ist innerhalb einer anderen („äußeren Klasse“) definiert. Ist sie privat, so können nur Objekte der äußeren Klasse Objekte der inneren erzeugen und verwenden. Ist die innere Klasse nicht-statisch, so ist eine Objekterzeugung sogar abhängig von einem Objekt der äußeren Klasse und nur über ein solches Objekt möglich.

Reflexion

Manche Programmiersprachen erlauben es, dass ein Programm die Struktur seiner Klassen kennt und auch das Verändern von Klassen zur Laufzeit, wie beispielsweise das Ändern der Struktur durch Hinzufügen oder Entfernen von Eigenschaften oder Methoden. Diese sogenannte „Reflexion“ sollte nur im Notfall verwendet werden, da das Programm dadurch schwer verständlich und Refactoring erschwert wird.

Siehe auch

Literatur

  • Laura Lemay, Rogers Cadenhead: Java in 21 Tagen. Markt & Technik, Buch- und Software-Verlag, München 2000, ISBN 3-8272-5578-3.
  • Peter Pepper: Programmieren lernen. Eine grundlegende Einführung mit Java. 3. Auflage. Springer, Berlin u. a. 2007, ISBN 978-3-540-72363-9.
  • Katharina Morik, Volker Klingspor: Informatik kompakt: Eine grundlegende Einführung mit Java. Springer, Berlin u. a. 2006, ISBN 3-540-24304-6.

Read other articles:

Tiara CintaPoster resmiGenre Drama Fantasi PembuatVerona PicturesDitulis olehTeam VeronaSutradaraBara Bantalaseta Paulus Pui J.KTri Willy RamadhanPemeran Cita Citata Bryan Mckenzie Lagu pembukaSelalu Ada – BlackoutPenata musikAry LogamNegara asalIndonesiaBahasa asliBahasa IndonesiaJmlh. episode13ProduksiProduser eksekutifDwi IlalangProduserTitin SuryaniLokasi produksiJakarta, IndonesiaPengaturan kameraJerry TattoDurasi120 MenitRumah produksiVerona PicturesDistributor VIVA ANTV Pictur...

 

 

Untuk daftar orang yang pernah menjabat sebagai Utusan Tetap RI untuk PBB di Jenewa, lihat Daftar Utusan Tetap Indonesia untuk Perserikatan Bangsa-Bangsa, Organisasi Perdagangan Dunia, dan Organisasi Internasional Lainnya di Jenewa. Utusan Tetap Republik Indonesia untuk Perserikatan Bangsa-Bangsa di New YorkLambang Kementerian Luar Negeri Republik IndonesiaPetahanaArrmanatha Christiawan Nasirsejak 25 Oktober 2021Kementerian Luar NegeriPerutusan Tetap Republik Indonesia untuk Perserikatan...

 

 

Artikel ini sebatang kara, artinya tidak ada artikel lain yang memiliki pranala balik ke halaman ini.Bantulah menambah pranala ke artikel ini dari artikel yang berhubungan atau coba peralatan pencari pranala.Tag ini diberikan pada Oktober 2022. Akademi Farmasi Mitra Sehat Mandiri Sidoarjo atau Akfar Mitra Sehat Mandiri Sidoarjo atau AKFARMISEDA adalah perguruan tinggi swasta kesehatan di Sidoarjo, Indonesia. Sejarah Akademi Farmasi Mitra Sehat Mandiri Sidoarjo telah beroperasional menyelengga...

صمام مفرغالنوع مكون إلكتروني — مكون إلكتروني فعَّال الاكتشافالتاريخ 1904 تعديل - تعديل مصدري - تعديل ويكي بياناتصمامات إلكترونية مختلفة. الصمام الإلكتروني[1] أو الصمام المُفرَّغ[2] أو الصمام الفراغي[2] أو الصمام الخلائي[2] (بالإنجليزية: Vacuum tube)‏[3][4] في ...

 

 

Confederate States Navy gunboat Ship's engines and lower portion of the after hull, photographed following recovery in the vicinity of Columbus, Georgia, circa the early or middle 1960s History Confederate States NameChattahoochee Laid downSaffold, Georgia In serviceFebruary 1863 FateScuttled 17 April 1865, stern raised and put on display in 1963 General characteristics Length150 ft (46 m) Beam25 ft (7.6 m) Draft8 ft (2.4 m) Speed12 knots (22 km/h; 14 m...

 

 

Russian telecommunication provider This article is about the cellular phone operator. For a sound amplification device, see megaphone. For the Austrian street newspaper, see Megaphon. MegaFonBusiness Center Oruzheyny in Moscow ,MegaFon's headquartersCompany typeOJSCTraded asMCX: MFONIndustryMobile telecommunicationsFounded1993; 31 years ago (1993)HeadquartersMoscow, RussiaKey peopleKhachatur Pombuhchian, CEO (2021)[1]ProductsMobile networks, fixed-line telephony...

Historical region of Croatia Proper KrbavaFloor elevation626 to 740 m (2,054 to 2,428 ft)[1]Area67 km2 (26 sq mi)GeographyCountryCroatiaState/ProvinceLika-Senj CountyCoordinates44°36′N 15°42′E / 44.6°N 15.7°E / 44.6; 15.7 Mountain rangeDinaric Alps Krbava field Krbava (pronounced [kř̩bav̞a]; Latin: Corbavia) is a historical region located in Mountainous Croatia and a former Catholic bishopric (1185–1460),[...

 

 

Species of bird Eleonora's falcon Over the cliffs near Episkopi in Cyprus Conservation status Least Concern  (IUCN 3.1)[1] Scientific classification Domain: Eukaryota Kingdom: Animalia Phylum: Chordata Class: Aves Order: Falconiformes Family: Falconidae Genus: Falco Species: F. eleonorae Binomial name Falco eleonoraeGéné, 1839 Migration routes of Eleonora's falcon Eleonora's falcon (Falco eleonorae) is a medium-sized falcon. It belongs to the hobby group, a rather clos...

 

 

Anna MouglalisMouglalis, 2012Lahir26 April 1978 (umur 46)Fréjus, Var, PrancisPekerjaanAktrismodelTahun aktif1997–sekarangSuami/istriVincent Raes ​ ​(m. 2013; c. 2014)​PasanganSamuel Benchetrit (2005–2012)Anak1 Anna Mouglalis (bahasa Yunani: Άννα Μουγλάλη; lahir 26 April 1978) adalah seorang aktris dan model Prancis. Dia dikenal sebagai duta rumah untuk Chanel sejak 2002,[1][2] dan untuk memerankan ...

Space between a train car and the edge of the station platform A Central line platform at Bank tube station, London, showing the 1-foot (30 cm) gap between the train and the platform edge (delineated by a solid white line). A platform gap (also known technically as the platform train interface or PTI in some countries) is the space between a train car (or other mass transit vehicle) and the edge of the station platform, often created by geometric constraints, historic legacies, or use of...

 

 

Timeline of the COVID-19 pandemic in New Zealand 2020 2021 2022 2023 2024 vte Timeline of ongoing pandemic in New Zealand This article documents the timeline of transmission of COVID-19 during the COVID-19 pandemic in New Zealand throughout the first half of 2020. All of the following dates and times are in New Zealand Time; NZST (UTC+12) from 5 April to 26 September, 2020, and NZDT (UTC+13) otherwise. Upon its introduction, the nationwide alert level was initially set at level 2 on 21 March,...

 

 

American sculptor Pony Express Mail Carrier, 1860–1861, Lee's sculpture at the William Jefferson Clinton Federal Building in Washington, D.C., was commissioned by the Section of Painting and Sculpture in 1937.[1] Arthur Lee (May 4, 1881 – 1961) was an American sculptor, born in Trondheim, Norway. His family immigrated to the United States in 1888, settling in St. Paul, Minnesota.[2] He studied at the Art Students League in New York City before returning to Europe to study ...

هذه المقالة يتيمة إذ تصل إليها مقالات أخرى قليلة جدًا. فضلًا، ساعد بإضافة وصلة إليها في مقالات متعلقة بها. (فبراير 2023) اعتبرت البنائية نموذجًا سائدًا، أو برنامجًا بحثيًا،[1] في مجال تعليم العلوم منذ الثمانينيات.[2][3] يستخدم مصطلح البنائية على نطاق واسع في العديد �...

 

 

Francesco di Girolamo BelluzziPotret Francesco di Girolamo 1716 Wali Kapten San MarinoMasa jabatan1 Oktober 1500 – 1 April 1501Menjabat bersama Simone di Antonio Belluzzi Informasi pribadiKebangsaanSan MarinoSunting kotak info • L • B Francesco di Girolamo Belluzzi adalah seorang politikus San Marino yang pernah menjabat sebagai Wali Kapten, yaitu salah satu dari dua kepala negara Republik San Marino yang dipilih setiap enam bulan. Ia menjabat dari tanggal 1 O...

 

 

Kapar di pantai di Terschelling, Laut Wadden Dalam hukum maritim, kapar , londong, lagan , dan jerahak adalah jenis karaman kapal yang spesifik. Kata-kata tersebut mempunyai arti bahari yang spesifik, dengan akibat hukum dalam hukum kelautan dan penyelamatan laut . [1] Karaman kapal diartikan sebagai sisa-sisa kapal yang telah karam, baik tenggelam maupun terapung di permukaan air. [2] Kapar (flotsam) Flotsam atau kapar mengacu pada barang-barang dari kapal karam yang terapun...

Municipality in Lower Saxony, GermanySeeburg MunicipalitySeeburger See FlagCoat of armsLocation of Seeburg within Göttingen district Seeburg Show map of GermanySeeburg Show map of Lower SaxonyCoordinates: 51°34′N 10°09′E / 51.567°N 10.150°E / 51.567; 10.150CountryGermanyStateLower SaxonyDistrictGöttingen Municipal assoc.Radolfshausen Government • MayorMartin BereszynskiArea • Total13.44 km2 (5.19 sq mi)Elevation155 ...

 

 

Questa voce o sezione sull'argomento attori non è ancora formattata secondo gli standard. Commento: Elenco della carriera da sistemare Contribuisci a migliorarla secondo le convenzioni di Wikipedia. Segui i suggerimenti del progetto di riferimento. Nicole Parker nel 2006. Nicole Frances Parker (Irvine, 21 febbraio 1978) è un'attrice, imitatrice, scrittrice e comica statunitense, nel 2009 ha avuto anche successo a Broadway Elphaba del musical Wicked, ispirato al Il meraviglioso mago di...

 

 

Punitive mark indicating a person speaks a non-standard, stigmatized dialectThis article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Dialect card – news · newspapers · books · scholar · JSTOR (September 2016) (Learn how and when to remove this message) A dialect card. A dialect card (Japanese: 方言札, Hepburn: hō...

Marigny-BrizaycomuneMarigny-Brizay – Veduta LocalizzazioneStato Francia Regione Nuova Aquitania Dipartimento Vienne ArrondissementPoitiers CantoneJaunay-Clan TerritorioCoordinate46°44′N 0°23′E46°44′N, 0°23′E (Marigny-Brizay) Altitudine61 e 154 m s.l.m. Superficie20,94 km² Abitanti1 159[1] (2009) Densità55,35 ab./km² Altre informazioniCod. postale86380 Fuso orarioUTC+1 Codice INSEE86146 CartografiaMarigny-Brizay Sito istituzionaleModi...

 

 

American judge Frank Harlan FreedmanSenior Judge of the United States District Court for the District of MassachusettsIn officeJanuary 1, 1992 – August 21, 2003Chief Judge of the United States District Court for the District of MassachusettsIn office1986–1992Preceded byAndrew A. CaffreySucceeded byJoseph L. TauroJudge of the United States District Court for the District of MassachusettsIn officeOctober 17, 1972 – January 1, 1992Appointed byRichard NixonPreceded byLevin...