Thread OOP, erste Schritte (15 answers)
Opened by hlubenow at 2012-02-21 16:20

hlubenow
 2012-02-21 23:14
#156299 #156299
User since
2009-02-22
875 Artikel
BenutzerIn
[default_avatar]
Ich hab' die letzten Jahre ja eher in Python geschrieben und wurde da mehr oder weniger doch gezwungen, in OOP zu schreiben (man kann da zwar auch ohne, aber stößt dann meist an Grenzen).
Eigentlich hatte ich aber gar keine Lust auf Klassen und Objekte. Ich hab' zwar vieles in Klassen gepackt, aber diese eigentlich mehr als Packages benutzt. Wenn's größer wurde, hab' ich z.B. auch versucht, nach MVC zu schreiben:

http://de.wikipedia.org/wiki/Model_View_Controller

Controller, Model und View sind da doch eher Packages, denke ich.
Nur einmal hab' ich ein wirkliches Objekt eingesetzt, und zwar bei einem Buchführungsprogramm die Klasse "Konto". In Perl sieht das jetzt bei mir so aus:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#!/usr/bin/perl

use warnings;
use strict;

package Konto;

    sub new {
        my $classname = shift;
        my $nummer = shift;
        my $name = shift;
        my $self = {nummer => $nummer,
                    name   => $name,
                    sollsum => 0,
                    habensum => 0,
                    buchungen => [],
                    saldo => 0,
                    saldoisin => ""};
        return bless($self, $classname);
    }

    sub bucheSoll {
        my $self = shift;
        my $soll = shift;
        my $bsatz = shift;
        $self->{sollsum} += $soll;
        push(@{$self->{buchungen}}, $bsatz);
    }

    sub bucheHaben {
        my $self = shift;
        my $haben = shift;
        my $bsatz = shift;
        $self->{habensum} += $haben;
        push(@{$self->{buchungen}}, $bsatz);
    }

    sub calcSaldo {
        my $self = shift;

        if ($self->{sollsum} > $self->{habensum}) {
            $self->{saldo} = $self->{sollsum} - $self->{habensum};
            $self->{saldoisin} = "soll";

        } elsif ($self->{sollsum} < $self->{habensum}) {
            $self->{saldo} = $self->{habensum} - $self->{sollsum};
            $self->{saldoisin} = "haben";

        } else {
            $self->{saldo} = 0;
            $self->{saldoisin} = "0";
        }
    }

    sub clear {
        my $self = shift;
        $self->{sollsum} = 0;
        $self->{habensum} = 0;
        $self->{buchungen} = [];
        $self->{saldo} = 0;
        $self->{saldoisin} = "";
    }
 
package main;

my $bankkonto = Konto -> new(1200, "Bank");
$bankkonto -> bucheHaben(13.36, "01.03.2011;X123;Telefonkosten;13,36;4920;1200");
$bankkonto -> bucheHaben(2.54, "01.03.2011;X123;VSt. Telefonkosten;2,54;1577;1200");
$bankkonto -> calcSaldo();
print "Saldo: $bankkonto->{saldo}\n";
print "Soll oder Haben: $bankkonto->{saldoisin}\n";

Für jedes Konto im Kontenrahmen (ggf. mal danach googeln) erzeugt man ein solches "Konto"-Objekt (Entschuldigung, daß etwas Deutsch und Englisch in der Klasse vermischt sind). Dann kann man praktisch direkt darauf buchen.
Obwohl die Klasse so kurz war, war das schon enorm mächtig und ohne OOP kaum so gut möglich.
Aber wie gesagt, bisher das einzige Mal, daß ich sowas wirklich gebrauchen konnte.
Na, wollt's halt mal vorstellen. ;)

View full thread OOP, erste Schritte