#!/usr/bin/perl ################################################# # Class example, and testing in Perl made by # Julien Moorrees , 2001 Ni-Frith Media Systems # # Situation (UML) # # _________________ ____________________ # | Person | | Adres | # |-----------------| |--------------------| # |(pr) count:Int | |(pr) street:String | # |(pr) name:string | 1 |--------------------| # |(pr) age:Int |-------------|(pu) getStreet() | # |-----------------| 0..* |(pu) setStreet() | # |(pu) new() | |(pu) addPerson() | # |(pu) setCount() | |(pu) removePerson() | # |(pu) getCount() | |____________________| # |(pu) getName() | # |(pu) setName() | # |(pu) getAge() | # |(pu) setAge() | # |_________________| ##################################################### ## Class definition : Person ##################################################### package Person; sub new { my($class) = shift; #Arguments #Property definition bless { "count" => int(0), "name" => "", "age" => int(0) }, $class; #Implementation } ##################################################### ## Class Constructor ##################################################### sub create { my($self) = shift; #Arguments my($aName) = shift; my($aAge) = shift; #Implementation $self->setName($aName); $self->setAge($aAge); } ##################################################### ## Incapsulation Methods (Get & Set) ##################################################### ################################################ ##Person::Count sub getCount { my($self) = shift; #Arguments #Implementation return $self->{count}; } sub setCount { my($self) = shift; #Arguments my($aCount) = shift; #Implementation $self->{count}= $aCount; } ################################################ ##Person::Name sub getName { my($self) = shift; #Arguments #Implementation return $self->{name}; } sub setName { my($self) = shift; #Arguments my($aName) = shift; #Implementation $self->{name}= $aName; } ################################################ ##Person::Age sub getAge { my($self) = shift; #Arguments #Implementation return $self->{age}; } sub setAge { my($self) = shift; #Arguments my($aAge) = shift; #Implementation $self->{age}= $aAge; } ##################################################### ## Class Methods ##################################################### ################################################ ## printProperties ## print all the properties of this instance. sub printProperties { my($self) = shift; #Arguments my(@keys) = @_ ? @_ : sort(keys(%{$self})); #Implementation print("CLASS: $self\n"); foreach $key (@keys) { printf("\t%10.10s => $self->{$key}\n", $key); } } ## End of Class definition : Person ##################################################### ##################################################### ##################################################### ## Class definition : Adres ##################################################### package Adres; sub new { my($class) = shift; #Arguments #Property definition #Property definition bless { 'persons' => [], "personCount" => int(0), "street" => "" }, $class; #Implementation } ##################################################### ## Class Constructor ##################################################### sub create { my($self) = shift; #Arguments my($aStreet) = shift; #Implementation $self->setStreet($aStreet); } ##################################################### ## Incapsulation Methods (Get & Set) ##################################################### ################################################ ##Adres::street sub getStreet { my($self) = shift; #Arguments #Implementation return $self->{street}; } sub setStreet { my($self) = shift; #Arguments my($aStreet) = shift; #Implementation $self->{street}= $aStreet; } ################################################ ##Adres::personCount sub getPersonCount { my($self) = shift; #Arguments #Implementation return $self->{personCount}; } sub setPersonCount { my($self) = shift; #Arguments my($aPersonCount) = shift; #Implementation $self->{personCount}= $aPersonCount; } ##################################################### ## Class Methods ##################################################### ################################################ ## addPerson ## Add the person to this adres. sub addPerson { my($self) = shift; #Arguments my($aPerson) = shift; if ( ref($aPerson) ne "Person" ){ #Error, this argument is not a person! print "Error! Adres::addPerson, Argument is not of class type Person"; exit; } #Implementation #print "\r\nadres:addPerson->"; #$aPerson->printProperties(); push(@{$self->{persons}},$aPerson); $self->setPersonCount($self->getPersonCount()+1); } ################################################ ## printProperties ## print all the properties of this instance. sub printProperties { my($self) = shift; printf("\t%18.18s <= street\n", $self->getStreet() ); printf("\t%18.18s <= personCount\n", $self->getPersonCount() ); for ( $counter=0;$counter<$self->{personCount};$counter++ ) { printf("\t%18.18s => $counter\n", "person number"); @{$self->{persons}}[$counter]->printProperties(); } } ################################################ ## printPropertiesDebug ## print all the properties of this instance. sub printPropertiesDebug { my($self) = shift; #Arguments my(@keys) = @_ ? @_ : sort(keys(%{$self})); #Implementation print("CLASS: $self\n"); foreach $key (@keys) { printf("\t%18.18s => $self->{$key}\n", $key); } } ## End of Class definition : Adres ##################################################### ##################################################### ##################################################### ## Application Start ##################################################### package main; #html start $htmlstart = <<'eindeHTML' Content-type: text/html Pragma: no-cache Cache-control: no-cache Expires: Mon, 28 Apr 1997 00:01:00 -0500 eindeHTML ; print $htmlstart; print "
\r\n";
#print "Julien: \r\n:";
$julien = Person->new();
$julien->create("Julien",22);
#$julien->printProperties();
#print "Leon: \r\n:";
$leon = Person->new();
$leon->create("Leon",19);
#$leon->printProperties();
$promenade = Adres->new();
$promenade->create("Promenade 21");
$promenade->addPerson($julien);
$promenade->addPerson($leon);
#$promenade->printPropertiesDebug();
$promenade->printProperties();
print "\r\n";