Static Klassen?

"Fast"? Was denn nicht? :)

Aber ja, Java zwingt einen zum Klassen-verwenden. Deswegen sind die eigenen Programme nicht automatisch
schönes OO, aber Java ist eben von Anfang an gar nicht dafür gedacht, prozedural zu programmieren.
Sprachen wie PHP und C++ lassen einem die Wahl, Java nicht.
 
Ok aber bei ausschließlicher Verwendung ohne Klassen muss ich doch alle Namenspaces Dateien manuell includen oder?
 
"Fast"? Was denn nicht? :)
Wenn man kleinkariert sein würde, könnte man sich mit Interfaces herausreden :)

Du hast mich aber ertappt! Eigentlich wollte ich nur die ganz absolute Aussage, dass es nur Klassen gebe, nicht so im Raum stehen lassen. Vielleicht gibt es mir noch unbekannte Aspekte in Java, deswegen das fast.

@ThiKool: Das hängt ganz stark von der gewählten Programmiersprache ab. In Java musst du zum Beispiel Klassen desselben Packages nicht via import einbinden, wobei du in PHP oder C++ gezwungen bist, im Prinzip alles einzubinden.
 
Ein wesentlicher Vorteil von Klassen beziehungsweise Objekten ist, dass Objekte/Instanzen einen gültigen Zustand der Instanzdaten garantieren können. Wenn du beispielsweise eine Person mit einem Namen und einem Alter modellieren möchtest, kannst du das ohne Objekte in etwa so machen:

PHP:
$person = array('name' => 'Lucas', 'age' => 30);

Diese Datenstruktur hat allerdings keine Möglichkeit, ihre eigene Korrektheit zu garantieren. Das hier…

PHP:
$person2 = array('name' => 'Lucas', 'age' => -12345.67);

…ergibt zum Beispiel keinen Sinn, kann aber problemlos so geschrieben werden.

Ein Objekt gibt dir syntaktische Möglichkeiten an die Hand, korrekte Werte sicherzustellen.

PHP:
class Person
{
    private $name;
    private $age;

    public function __construct($name, $age)
    {
        $this->setName($name);
        $this->setAge($age);
    }

    public function getName()
    {
        return $this->name;
    }

    public function getAge()
    {
        return $this->age;
    }

    public function setName($name)
    {
        if (!is_string($name)) {
            throw new Exception('Name must be of type string');
        }

        $name = trim($name);

        if ('' === $name) {
            throw new Exception('Name cannot be empty');
        }

        $this->name = $name;
    }

    public function setAge($age)
    {
        if (!is_int($age)) {
            throw new Exception('Age must be of type int');
        }

        if (0 > $age) {
            throw new Exception('Age must be >= 0');
        }

        $this->age = $age;
    }
}

Wenn du nun Code hast, der mit einer Person (eine Datenstruktur mit name und age) arbeitet, kannst du dir bei Nutzung von Klassen/Objekten sicher sein, dass die Datenstruktur bestimmte Vorgaben erfüllt.
 
Zuletzt bearbeitet:
Ich muss nochmal eine Frage stellen.

Ich habe mir eine Mail Klasse erstellt die so befüllt wird:

Code:
$mail = new Mail();
$mail -> receiver = $receiver;
$mail -> content = $text;
$mail -> subject= "testmail";
$mail -> footer = $footer;
$mail -> send();

davon sind receiver, content und subject Pflichtangaben die gemacht werden müssen.

Gibt es dafür auch eine fertige Methode dir mir eine Fehlermeldung schmisst?
Der __construct ist ja nicht geeignet, da ich sonst ja alles über $mail = new Mail(VARIABLEN); übergeben müsste, was ich nicht will, da ich es sonst zu unübersichtlich finde.

Danke euch
 
Du musst ja nur am Anfang der send-Methode prüfen, ob die
Pflichtangaben da sind, und ggf. eben einen Fehlerwert zurückgeben?

Und Setter-Methoden zu verwenden wäre auch nicht verkehrt.
 
Danke,

ich dachte es gibt sowas ähnliches wie den Konstruktor, der automatisch überprüft ob definierte Variablen Werte übergeben wurden.

Was bieten Setter Methoden für einen Vorteil ausser das der Code erstmal länger wird?
 
Der Konstruktor ist ganz am Anfang, und da willst du es ja nicht übergeben?

Setter-Methoden (und Kapselung generell) sind deswegen besser, weil du bei späteren
Änderungen/Erweiterungen dieser Klasse nicht den ganzen Programmcode [jedes
Programms mit dieser Klasse] durchsuchen musst, wo die Variable verwendet wurde,
sondern wirklich nur eine Stelle änderst.
 
Zurück