# Fragen Wegen Klassenarbeit!



## Toasti2000 (22. März 2004)

Hallo ihr da,

habe ein paar wichtige Fragen, schreibe morgen eine Klassenarbeit über das Thema SQL und eben Java.

Wir haben Java eigentlich nur kurz angeschnitten und uns eine kleine Zeichnung dazu gemacht. Trotzdem will unser Lehrer uns darüber ein bißchen ausquetschen.

Folgende Fragen hab ich:

Was ist 

eine Klasse?

ein Objekt?

ein Konstruktor?

Unterschied zwischen einer Klasse und einem Objekt?

Ich verstehe den ganzen Zusammenhabg eigentlich garnet richtig, deshalb post ich hier mal das Beispiel was wir kurz gemacht haben. Es handelt sich dabei, ganz einfach eigentlich, um die Herstellung von Autos, aber seht selbst:



```
class Auto
{
  String Ausstellung;
  String Farbe;
  Auto (String Color)
  {
    Farbe=Color;
  }
  Auto (String Color, String Bezug)
  {
  Farbe=Color;
  Ausstattung=Bezug;
  }
  private int bremse (int Zeit)
  {
  ...
  ...
  }
  public static void main (String[]args)
    {
      new Auto (blau);
    }
}
```


Wäre echt toll wenn Ihr mir helfen könntet und mir des wirklich Schritt für Schritt erklärt was in dem Beispiel passiert und eben die paar Fragen die ich oben noch gestellt habe.

Vielen, vielen Dank!

Basti


----------



## Christian Fein (22. März 2004)

Deine Fragen sind elementares OOP.

OOP lässt sich nur schwer in ein paar Zeilen packen aber ich versuch das mal
eben auf kürzeste Weise zu erklären.

Ziel der Object Orientierten Programmierung (OOP) ist es ein abbild von wirklich
gegebenen Dingen zu erstellen. So in deinem Beispiel ein Auto Object letztendlich
eine programmtechnisches Abbild eines richtigen Autos darstellt. 

Eine Klasse ist eine Art "Bauanleitung" für ein Object. Eine Klasse beschreibt
Eigenschaften:
in deinem Fall Austellung und Farbe. 
Und Methoden (Operationen):
in deinem Fall bremse();

Ein Object ist eine Instanz einer Klasse.
Das heisst wenn die Klasse eine Bauanleitung für ein IKEA-Schrank ist, dann ist der 
fertig gebaute IKEA-Schrank ein Object, also eine Instanz der IKEASchrank Klasse.
So instanziert mann Object folgendemassen:
IKEASchrank meinSchrank = new IKEASchrank();
oder um bei deinem Beispiel zu bleiben:
Auto meinAuto = new Auto("rot");

Und hier kommt der Konstruktor ins Spiel. Ein Konstruktor ist die Methode die aufgerufen wird sobald eine Instanz (Object) einer Klasse gebildet wird.
Bei new Auto("rot"); wird der Konstruktor aufgerufen deren Methodensignatur
auf deinen Aufruf passt. 
Sprich du rufst den Konstrukor auf der einen String (hier "rot") übernimmt. Das währe in deinem Beispiel follgender Konstruktor

```
Auto (String Color)
{
   Farbe=Color;
}
```
Kontruktoren erkennt mann auf 2 Arten recht schnell. 
1. Der Methodename ist der selbe wie der Klassen name: hier Auto
2. Es wird kein Rückgabewert angegeben.

Jetzt dürfte auch die Antwort auf deine letzte Frage dir klar sein. 
Eine Klasse ist eine Anleitung wie ein Object auszusehen hat. Eine Klasse
ist nichts "greifbares" sondern ohne funktion, bis ein Object von deiner Klasse
instanziert (gebaut) wurde.

Etwas professioneller ausgedrückt:
Eine Klasse ist die definition der Objecte die von dieser Klasse instanziert werden.

Es gibt zwar auch statische Methoden, Felder die der Klasse zugehörig und keinem Object zugehörig sind, aber das solltest du erstmal noch ausser acht lassen.


----------



## Toasti2000 (22. März 2004)

Erstmal DANKE für die schnelle Antwort.

Hier nochmal der Code, sollte nicht Ausstellung, sondern Ausstattung heißen:


```
class Auto
{
  String Ausstattung;
  String Farbe;
  Auto (String Color)
  {
    Farbe=Color;
  }
  Auto (String Color, String Bezug)
  {
  Farbe=Color;
  Ausstattung=Bezug;
  }
  private int bremse (int Zeit)
  {
  ...
  ...
  }
  public static void main (String[]args)
    {
      new Auto (blau);
    }
}
```

so richtig kappieren tu ich das net was da abläuft, von daher denke ich mal, tu ich mich morgen ziemlich schwer bei der Arbeit wenn ich netmal die Frage vielleicht verstehe... oh man... aber irgendwie klingt das für mich so unlogisch!

Kannst du mir genau erklären was Schritt für Schritt in dem Beispiel passiert?

DAKE!


----------



## Christian Fein (22. März 2004)

```
class Auto
{
  String Ausstattung;
  String Farbe;
  Auto (String Color)
  {
    Farbe=Color;
  }
  Auto (String Color, String Bezug)
  {
  Farbe=Color;
  Ausstattung=Bezug;
  }
  private int bremse (int Zeit)
  {
  ...
  ...
  }
  public static void main (String[]args)
    {
      new Auto (blau);
    }
}
```

Der Haupteinstiegspunkt in dienem Programm ist die main() Methode.
In dieser wird eine Instanz (Object) der Klasse Auto erstellt. Der Code würde
aber einen Syntaxfehler geben da new Auto(blau) eigentlich new Auto("blau"); heissen 
sollte.
new Auto("blau") ruft den Konstruktor der Klasse Auto auf. Dadurch das du nur einen 
Parameter des Types Strings (das "blau" ist ein String) übergibst wird automatisch der richtige Konstruktor:


```
Auto (String Color)
  {
    Farbe=Color;
  }
```

aufgerufen. Dadurch das du die Instanz aber keiner Variable zuweist wird sofort nachdem der Konstruktor aufgerufen worden ist dein Object für den Garbage Collektor freigegeben.

Insgesammt sind einige stilistischen Fehler, und auch andere Fehler vorhanden. 
Ich schreib das mal eben um


```
public class Auto
{
  private String ausstattung;
  private String farbe;

  public Auto(String farbe)
  {
    this.farbe=farbe;
  }

  public Auto(String farbe, String austattung)
  {
   this.farbe=farbe;
   this.austattung=austattung;
  }
  private int bremse (int zeit)
  {
  ...
  ...
  }
  public static void main (String[]args)
    {
      Auto auto = new Auto("blau");
    }
}
```


Ich habe erstmal den Syntaxfehler new Auto(blau) umgeändert und dabei gleich das Object der variable auto zugewiesen. 
Als nächstes habe ich die Parameter deiner Methoden in einen Einheitlichen Stil gebracht, sprich wenn der Parameter Color der Instanzvariable farbe zugewiesen werden soll dann solltest du den gleichen Bezeichner nutzen, da dies einiges vereinfacht. 
Durch this greifst du auf die instanz zu und kannst klar machen das der wert für die Instanzvariable farbe bestimmt ist.
Per Java Konvention schriebt mann Klassen mit einem ersten Grossen Buchstaben, wurde hier richtig gemacht. 
Methoden werden klein geschrieben, wurde hier richtig gemacht. 
Variablen werden klein geschrieben, das habe ich hier auch verbessert.

Wenn dein Lehrer für den Code verantwortlich ist, sag ihm einen schönen Gruss, das passt nicht so ganz )


----------

