Klasse: Unterschied zwischen den Versionen

Aus SibiWiki
Zur Navigation springen Zur Suche springen
 
(13 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 3: Zeile 3:


= Was ist eine Klasse? =
= Was ist eine Klasse? =
Eine Klasse stellt eine Vorlage (eine Art Bauplan) für Objekte dar, in denen festgelegt wird, welche Eigenschaften ([[Attribute]]) die Objekte haben sollen und was man mit den Objekten machen können soll ([[Methoden]]).
Eine Klasse stellt eine Vorlage (eine Art Bauplan) für Objekte dar, in denen festgelegt wird, welche Eigenschaften ([[Java_Basis-Sprachelemente#Attribute|Attribute]]) die Objekte haben sollen und was man mit den Objekten machen können soll ([[Java_Basis-Sprachelemente#Methoden|Methoden]]).


= Beispiel für eine Klasse =
Ausgehend von einer Anforderungsdefinition plant man eine Klasse. I.d.R. beginnt man, indem man ein [[Klassendiagramm]] zeichnet und das dann in Java umsetzt.
Ausgehend von einer Anforderungsdefinition plant man eine Klasse. I.d.R. beginnt man, indem man ein [[Klassendiagramm]] zeichnet und das dann in Java umsetzt.


== Anforderungsbeschreibung einer Klasse <code>Benutzer</code> ==
==Erklärvideos==
Ein paar Oberstufenschüler planen, ein asoziales Netzwerk zu gründen. Die Nutzer des Netzwerkes sollen durch eine Klasse <code>Benutzer</code> realisiert werden. Zu jedem Nutzer sollen folgende Informationen gespeichert werden:
 
* Nachname und Vorname des Nutzers
* '''[https://youtu.be/JVeAUGX60-A Erklärvideo zu Klassen, Objekten, Attritbuten & Methoden (auf youtube)]'''. <br/>'' (Objekt- und Klassendiagramme kommen auch vor.)<br/>[[Medium:VAB-01 Informatik10 KlassenObjekteAttributeMethoden.pdf|Arbeitsblatt zum Video (PDF)]]. <br/>Zu Teilen der Aufgaben gibt es die Lösung im Video, die anderen Aufgaben werden erst im Unterricht besprochen.<br/><br/>
* Alter des Nutzers
* '''[https://youtu.be/JPWJJCmwi8A OOP in Java (1): Analyse der Klasse Baum]'''
* ob der Nutzer Brillenträger ist
* '''[https://youtu.be/E3bR5lN5Y9A OOP in Java (2): Programmierung der Klasse Haus]'''
* der andere Nutzer des Netzwerks, auf dessen Profil der Nutzer am häufigsten geklickt hat
* '''[https://youtu.be/LNBaADc0VU4 OOP in Java (3): Die Klasse Doppelhaus]'''
 
= Beispiel 1: Die Klasse <code>Baum.java</code>=
Hier werden beispielhaft das Klassendiagramm und der Quelltext der Klasse <code>Baum</code> dokumentiert.
 
Im Detail erläutert werden die einzelnen Sprachelemente hier: [[Java Basis-Sprachelemente]].


Außerdem sollen folgende Aktionen auf <code>Benutzer</code>-Objekte angewendet werden können:
== Klassendiagramm der Klasse <code>Baum.java</code>==
* man soll den Vornamen und Nachnamen eines <code>Benutzer</code>-Objektes auslesen können (-> [[get-Methode]])
* man soll das Alter eines Nutzers eintragen bzw. ändern können (-> [[set-Methode]])
* falls ein Benutzer nun Brillenträger ist, soll man den entsprechenden Attributwert ändern können
* falls ein Benutzer einen neuen Lieblingsnutzer hat, soll dieser eingetragen werden können


== Klassendiagramm der Klasse <code>Benutzer</code> ==
Detaillierte Erläuterungen zu Klassendiagrammen findet man [[Klassen- und Implementationsdiagramm|hier]].
Im Klassendiagramm wurden aus Platzgründen nur Teile der sinnvollen Methoden aufgeführt.


{| class="wikitable"
{| class="wikitable"
! Benutzer
! '''Baum'''
|-
|-
| - nachname: String
| - stamm: Quadrat


- vorname: String
- krone: Kreis


- alter: int
- istRot: boolean


- brillentraeger: boolean
|-
| + Baum()


- lieblingsnutzer: Benutzer
+ sichtbarMachen()
|-
| + Benutzer(pNachname: String, pVorname: String, pAlter: int)


+ getNachname(): String
+ horizontalBewegen(pDistanz: int)


+ getVorname(): String
+ fruehling()


+ traegtNunBrille()
+ herbst()


+ setLieblingsNutzer(pNeuerLiebling: Benutzer)
+ hatGrueneBlaetter(): boolean
|}
|}


== Umsetzung der Klasse in Java ==
== Quelltext der Klasse <code>Baum.java</code>==
<code>
public class Benutzer
{
    // Attribute
    private String nachname;
    private String vorname;
    private int alter;
    private boolean brillentraeger;
    private Benutzer lieblingsnutzer;
    // Konstruktor
    public Benutzer(String pNachname, String pVorname, int pAlter)
    {
      nachname = pNachname;
      vorname = pVorname;
      alter = pAlter;
      brillentraeger = false;
      lieblingsnutzer = null;
    }
    // weitere Methoden
    public String getNachname()
    {
      return nachname;
    }
   
    public String getVorname()
    {
      return vorname;
    }
    public void traegtNunBrille()
    {
      brillentraeger = true;
    }
    public void setLieblingsNuetzer(Benutzer pNeuerLiebling)
    {
      lieblingsnutzer = pNeuerLiebling;
    }
}
</code>
 
= Beispiel für eine Klasse in BlueJ: <code>Baum.java</code>=
Hier ist beispielhaft der Quelltext der Klasse <code>Baum</code> dokumentiert.
 
Im Detail erläutert werden die einzelnen Sprachelemente hier: [[Java Basis-Sprachelemente]].


Für Erläuterungen einfach auf die Links in den Kommentaren klicken!


<code>
<code>
Zeile 102: Zeile 54:
   public class Baum
   public class Baum
   {
   {
 
     '''// Attribute'''
     '''// [[Java_Basis-Sprachelemente#Attribute|Attribute]]'''
     private Quadrat stamm;
     private Quadrat stamm;
     private Kreis krone;
     private Kreis krone;
     private boolean istRot;
     private boolean istRot;
 
     '''// Konstruktor'''
     '''// [[Java_Basis-Sprachelemente#Konstruktor|Konstruktor]]'''
     public Baum()
     public Baum()
     {
     {
         '''// Aufruf eines Konstruktors: Schluesselwort new'''
         '''// Aufruf eines Konstruktors: Schluesselwort new'''
         stamm = new Quadrat();
         stamm = new Quadrat();
 
         '''// Aufruf einer Methode fuer ein anderes Objekt.'''
         '''// Aufruf einer Methode fuer ein anderes Objekt.'''
         '''// Attributname -> Punkt -> Methodenname
         '''// Attributname -> Punkt -> Methodenname
         '''// Es wird ein Parameter uebergeben (30)'''
         '''// Es wird ein Parameter uebergeben (30)'''
         stamm.groesseAendern(30);
         stamm.groesseAendern(30);
 
   
         '''// hier werden zwei Parameter uebergeben; getrennt durch Kommas.'''
         '''// hier werden zwei Parameter uebergeben; getrennt durch Kommas.'''
         stamm.bewegeZuPosition(30,60);
         stamm.bewegeZuPosition(30,60);
 
   
         '''// hier wird ein String als Parameter uebergeben: "schwarz"'''
         '''// hier wird ein String als Parameter uebergeben: "schwarz"'''
         stamm.farbeAendern("schwarz");
         stamm.farbeAendern("schwarz");
Zeile 129: Zeile 81:
         krone.farbeAendern("gruen");
         krone.farbeAendern("gruen");
         istRot = false;
         istRot = false;
 
   
         '''//Aufruf einer Methode der Klasse Baum'''
         '''//Aufruf einer Methode der Klasse Baum'''
         sichtbarMachen();
         sichtbarMachen();
     }
     }
 
    '''// [[Java_Basis-Sprachelemente#Methoden|Methoden]]'''
   
     '''// Methode OHNE Rueckgabe und OHNE Parameter: Schluesselwort void, leere Klammern ()'''
     '''// Methode OHNE Rueckgabe und OHNE Parameter: Schluesselwort void, leere Klammern ()'''
     public void sichtbarMachen()
     public void sichtbarMachen()
Zeile 140: Zeile 94:
         krone.sichtbarMachen();
         krone.sichtbarMachen();
     }
     }
 
   
     '''//Methode mit einem Parameter: (Parametertyp Parametername)'''
     '''//Methode mit einem Parameter: (Parametertyp Parametername)'''
     public void horizontalBewegen(int distanz)
     public void horizontalBewegen(int distanz)
Zeile 148: Zeile 102:
         krone.horizontalBewegen(distanz);
         krone.horizontalBewegen(distanz);
     }
     }
 
   
     '''// Methode OHNE Rueckgabe und OHNE Parameter: Schluesselwort void, leere Klammern ()'''
     '''// Methode OHNE Rueckgabe und OHNE Parameter: Schluesselwort void, leere Klammern ()'''
     public void herbst()
     public void herbst()
Zeile 155: Zeile 109:
         istRot = true;
         istRot = true;
     }
     }
 
   
     '''// Methode OHNE Rueckgabe und OHNE Parameter: Schluesselwort void, leere Klammern ()'''
     '''// Methode OHNE Rueckgabe und OHNE Parameter: Schluesselwort void, leere Klammern ()'''
     public void fruehling()
     public void fruehling()
Zeile 166: Zeile 120:
     public boolean hatGrueneBlaetter()
     public boolean hatGrueneBlaetter()
     {
     {
        ergebnis = true;
      '''// [[Java_Basis-Sprachelemente#lokale_Variable|lokale Variable]]'''     
      // die lokale Variable ergebnis deklarieren
      // und mit true initialisieren
      // ergebnis wird am Ende zurueckgegeben!
      boolean ergebnis = true;
   
         if(istRot == true)
         if(istRot == true)
         {
         {
Zeile 179: Zeile 138:
    
    
   }
   }
</code>
=Beispiel 2: Die Klasse <code>Benutzer</code>=
== Anforderungsbeschreibung einer Klasse <code>Benutzer</code> ==
Ein paar Oberstufenschüler planen, ein asoziales Netzwerk zu gründen. Die Nutzer des Netzwerkes sollen durch eine Klasse <code>Benutzer</code> realisiert werden. Zu jedem Nutzer sollen folgende Informationen gespeichert werden:
* Nachname und Vorname des Nutzers
* Alter des Nutzers
* ob der Nutzer Brillenträger ist
* der andere Nutzer des Netzwerks, auf dessen Profil der Nutzer am häufigsten geklickt hat
Außerdem sollen folgende Aktionen auf <code>Benutzer</code>-Objekte angewendet werden können:
* man soll den Vornamen und Nachnamen eines <code>Benutzer</code>-Objektes auslesen können (-> [[Java_Basis-Sprachelemente#sondierende_Methode / verändernde_Methode|get-Methode]])
* man soll das Alter eines Nutzers eintragen bzw. ändern können (-> [[Java_Basis-Sprachelemente#sondierende_Methode / verändernde_Methode|set-Methode]])
* falls ein Benutzer nun Brillenträger ist, soll man den entsprechenden Attributwert ändern können
* falls ein Benutzer einen neuen Lieblingsnutzer hat, soll dieser eingetragen werden können
== Klassendiagramm der Klasse <code>Benutzer</code> ==
Im Klassendiagramm wurden aus Platzgründen nur Teile der sinnvollen Methoden aufgeführt.
Detaillierte Erläuterungen zu Klassendiagrammen findet man [[Klassen- und Implementationsdiagramm|hier]].
{| class="wikitable"
! Benutzer
|-
| - nachname: String
- vorname: String
- alter: int
- brillentraeger: boolean
- lieblingsnutzer: Benutzer
|-
| + Benutzer(pNachname: String, pVorname: String, pAlter: int)
+ getNachname(): String
+ getVorname(): String
+ traegtNunBrille()
+ setLieblingsNutzer(pNeuerLiebling: Benutzer)
|}
== Umsetzung der Klasse in Java ==
<code>
public class Benutzer
{
    // Attribute
    private String nachname;
    private String vorname;
    private int alter;
    private boolean brillentraeger;
    private Benutzer lieblingsnutzer;
    // Konstruktor
    public Benutzer(String pNachname, String pVorname, int pAlter)
    {
      nachname = pNachname;
      vorname = pVorname;
      alter = pAlter;
      brillentraeger = false;
      lieblingsnutzer = null;
    }
    // weitere Methoden
    public String getNachname()
    {
      return nachname;
    }
   
    public String getVorname()
    {
      return vorname;
    }
    public void traegtNunBrille()
    {
      brillentraeger = true;
    }
    public void setLieblingsNuetzer(Benutzer pNeuerLiebling)
    {
      lieblingsnutzer = pNeuerLiebling;
    }
}
</code>
</code>

Aktuelle Version vom 14. Februar 2022, 15:55 Uhr


Was ist eine Klasse?

Eine Klasse stellt eine Vorlage (eine Art Bauplan) für Objekte dar, in denen festgelegt wird, welche Eigenschaften (Attribute) die Objekte haben sollen und was man mit den Objekten machen können soll (Methoden).

Ausgehend von einer Anforderungsdefinition plant man eine Klasse. I.d.R. beginnt man, indem man ein Klassendiagramm zeichnet und das dann in Java umsetzt.

Erklärvideos

Beispiel 1: Die Klasse Baum.java

Hier werden beispielhaft das Klassendiagramm und der Quelltext der Klasse Baum dokumentiert.

Im Detail erläutert werden die einzelnen Sprachelemente hier: Java Basis-Sprachelemente.

Klassendiagramm der Klasse Baum.java

Detaillierte Erläuterungen zu Klassendiagrammen findet man hier.

Baum
- stamm: Quadrat

- krone: Kreis

- istRot: boolean

+ Baum()

+ sichtbarMachen()

+ horizontalBewegen(pDistanz: int)

+ fruehling()

+ herbst()

+ hatGrueneBlaetter(): boolean

Quelltext der Klasse Baum.java

Für Erläuterungen einfach auf die Links in den Kommentaren klicken!

 // Klassendeklaration
 public class Baum
 {
 
   // Attribute
   private Quadrat stamm;
   private Kreis krone;
   private boolean istRot;
  
   // Konstruktor
   public Baum()
   {
       // Aufruf eines Konstruktors: Schluesselwort new
       stamm = new Quadrat();
  
       // Aufruf einer Methode fuer ein anderes Objekt.
       // Attributname -> Punkt -> Methodenname
       // Es wird ein Parameter uebergeben (30)
       stamm.groesseAendern(30);
    
       // hier werden zwei Parameter uebergeben; getrennt durch Kommas.
       stamm.bewegeZuPosition(30,60);
   
       // hier wird ein String als Parameter uebergeben: "schwarz"
       stamm.farbeAendern("schwarz");
       krone = new Kreis();
       krone.bewegeZuPosition(20,20);
       krone.groesseAendern(50);
       krone.farbeAendern("gruen");
       istRot = false;
   
       //Aufruf einer Methode der Klasse Baum
       sichtbarMachen();
   }

   // Methoden
   
   // Methode OHNE Rueckgabe und OHNE Parameter: Schluesselwort void, leere Klammern ()
   public void sichtbarMachen()
   {
       stamm.sichtbarMachen();
       krone.sichtbarMachen();
   }
   
   //Methode mit einem Parameter: (Parametertyp Parametername)
   public void horizontalBewegen(int distanz)
   {
       //der Parameter wird weiterverwendet
       stamm.horizontalBewegen(distanz);
       krone.horizontalBewegen(distanz);
   }
   
   // Methode OHNE Rueckgabe und OHNE Parameter: Schluesselwort void, leere Klammern ()
   public void herbst()
   {
       krone.farbeAendern("rot");
       istRot = true;
   }
    
   // Methode OHNE Rueckgabe und OHNE Parameter: Schluesselwort void, leere Klammern ()
   public void fruehling()
   {
       krone.farbeAendern("gruen");
       istRot = false;
   }
     
   //Methode mit einem Rueckgabetyp: boolean
   public boolean hatGrueneBlaetter()
   {
      // lokale Variable      
      // die lokale Variable ergebnis deklarieren
      // und mit true initialisieren
      // ergebnis wird am Ende zurueckgegeben!
      boolean ergebnis = true;
    
       if(istRot == true)
       {
           // wenn der Baum rot ist...
           // ... hat er keine gruenen Blaetter!
           ergebnis = false;
       }
       // return-Statement: der zurueckgegebene Wert muss den Typ haben
       // wie im Methodenkopf angegeben. (Hier: boolean)
       return ergebnis;
   }
  
 }

Beispiel 2: Die Klasse Benutzer

Anforderungsbeschreibung einer Klasse Benutzer

Ein paar Oberstufenschüler planen, ein asoziales Netzwerk zu gründen. Die Nutzer des Netzwerkes sollen durch eine Klasse Benutzer realisiert werden. Zu jedem Nutzer sollen folgende Informationen gespeichert werden:

  • Nachname und Vorname des Nutzers
  • Alter des Nutzers
  • ob der Nutzer Brillenträger ist
  • der andere Nutzer des Netzwerks, auf dessen Profil der Nutzer am häufigsten geklickt hat

Außerdem sollen folgende Aktionen auf Benutzer-Objekte angewendet werden können:

  • man soll den Vornamen und Nachnamen eines Benutzer-Objektes auslesen können (-> get-Methode)
  • man soll das Alter eines Nutzers eintragen bzw. ändern können (-> set-Methode)
  • falls ein Benutzer nun Brillenträger ist, soll man den entsprechenden Attributwert ändern können
  • falls ein Benutzer einen neuen Lieblingsnutzer hat, soll dieser eingetragen werden können

Klassendiagramm der Klasse Benutzer

Im Klassendiagramm wurden aus Platzgründen nur Teile der sinnvollen Methoden aufgeführt.

Detaillierte Erläuterungen zu Klassendiagrammen findet man hier.

Benutzer
- nachname: String

- vorname: String

- alter: int

- brillentraeger: boolean

- lieblingsnutzer: Benutzer

+ Benutzer(pNachname: String, pVorname: String, pAlter: int)

+ getNachname(): String

+ getVorname(): String

+ traegtNunBrille()

+ setLieblingsNutzer(pNeuerLiebling: Benutzer)

Umsetzung der Klasse in Java

public class Benutzer
{
   // Attribute
   private String nachname;
   private String vorname;
   private int alter;
   private boolean brillentraeger;
   private Benutzer lieblingsnutzer;

   // Konstruktor
   public Benutzer(String pNachname, String pVorname, int pAlter)
   {
      nachname = pNachname;
      vorname = pVorname;
      alter = pAlter;
      brillentraeger = false;
      lieblingsnutzer = null;
   }

   // weitere Methoden
   public String getNachname()
   {
      return nachname;
   }
   
   public String getVorname()
   {
      return vorname;
   }

   public void traegtNunBrille()
   {
      brillentraeger = true;
   }

   public void setLieblingsNuetzer(Benutzer pNeuerLiebling)
   {
      lieblingsnutzer = pNeuerLiebling;
   }
}