Avatar billede Daniel.E Praktikant
16. november 2015 - 11:54 Der er 12 kommentarer og
1 løsning

Fra diagrammer til kode

Hej eksperter,

Med f.eks. java kunne man benytte:
USE_CASES->domain_model->sequence_diagram->class_diagram->code.

Jeg koder ikke i Java, og skal dokumentere min funktionalitet på en vis, så at systemudviklingen kan ses.

Jeg søger en måde at dokumentere min kode på. Jeg har godt og vel 60% funktions-baseret kode med databasekald skrevet med PHP, og resten er lidt klasser til at undgå redundant kode. Dette lyder umiddelbart som et rigtigt klassisk kodeeksempel, og det er det.

Er der nogle forslag til hvordan at jeg dokumentere min kode i diagrammer, så en anden udvikler kan se mine diagrammer og derefter skrive kode uden at samtale med mig?



Jeg har USE CASES og _meget_ overordnet flowcharts. Flowchartsene jeg har er kun for at vise et flow imellem de overordnet funktionaliteter, men på ingen måde bekriver hvordan den enkelte funktionalitet virker.
Avatar billede arne_v Ekspert
16. november 2015 - 18:05 #1
UML er vel ligesaa egnet til PHP som til Java !?!?
Avatar billede Daniel.E Praktikant
16. november 2015 - 18:09 #2
Hej Arne,

Det har du helt ret i. Men nu arbejder jeg ikke med Objekter fuldt ud.

F.eks. kan man ikke tegne en domain model i et ikke objekt orienteret projekt.

Endvidere kan man heller ikke tegne et klasse diagram over funktioner.

Har du et forslag?
Avatar billede arne_v Ekspert
16. november 2015 - 18:22 #3
Ah - det var det som er problemet.

Maaske kan du vaere lidt kreativ.

domain model class disgram:

vis et associativt array som en klasse med fields svarende til keys

sequence diagram:

vis PHP filer som klasser

class diagram:

vis en fil med funktioner som en klasse med static methods
Avatar billede Daniel.E Praktikant
16. november 2015 - 18:25 #4
Ikke en dårlig ide. Jeg er dog ikke helt sikker på at jeg kan følge dig i din domain model beskrivelse. Hvad mener du sådan mere præcist?

De andre kan jeg godt forstå, faktisk super fed ide Arne :)
Avatar billede arne_v Ekspert
16. november 2015 - 18:42 #5
I.s.f. en:

class Foobar {
    private $a;
    private $b;
    private $c;
    ...
}

you probably have something like a:

array('a' => 123, 'b' => 456, 'c' => 789)

saa i.s.f. $fb->a you refer to fb['a'] men det er jo lidt det samme.
Avatar billede Daniel.E Praktikant
16. november 2015 - 22:40 #6
Hej Arne,


Jeg tror ikke at jeg forstår det du siger om domain modellen. En domain model repræsentere de vigtigste elementer til selve systemet/ideen. Det er dog heller ikke den vigtigste del af få med i min rapport, men hvis du har en bedre forklaring til dette, ville jeg sætte pris på det.

Sequence diagrammmet kan jeg godt se din ide med, den er faktisk ret god.
Det samme vil jeg sige om din ide til class diagram.

På forhånd så må du godt give et svar også i dit næste var :)

Og på forhånd tak.
Avatar billede arne_v Ekspert
17. november 2015 - 02:37 #7
Proev og se paa denne kode:


<?php
// **** normal code ****
class OrderLine {
    private $no;
    private $descrip;
    public function __construct($no, $descrip) {
        $this->no = $no;
        $this->descrip = $descrip;
    }
    public function getNo() {
        return $this->no;
    }
    public function getDescrip() {
        return $this->descrip;
    }
    public function toString() {
        return sprintf("%d %s\n", $this->no, $this->descrip);
    }
}

class Order {
    private $customer;
    private $lines;
    public function __construct($customer, $lines) {
        $this->customer = $customer;
        $this->lines = $lines;
    }
    public function getCustomer() {
        return $this->customer;
    }
    public function getLInes() {
        return $this->lines;
    }
    function toString() {
        $res = sprintf("%s\n", $this->customer);
        foreach($this->lines as $line) {
            $res .= $line->toString();
        }
        return $res;
    }
}

// build domain model
$orders = array(new Order('Hansen', array(new OrderLine(2000, 'mursten'), new OrderLine(3, 'poser cement'))),
                new Order('Jensen', array(new OrderLine(50, 'planker'))));
// test domain model
foreach($orders as $order) {
    echo $order->toString();
}

// **** code for those withs trong dislike of OO ****

// please use associative array with keys 'no' and 'descrip' for order lines
// please use associative array with keys 'customer' and 'lines'

function orderline_tostring($orderline) {
    return sprintf("%d %s\n", $orderline['no'], $orderline['descrip']);
}

function order_tostring($order) {
        $res = sprintf("%s\n", $order['customer']);
        foreach($order['lines'] as $line) {
            $res .= orderline_tostring($line);
        }
        return $res;
}



// build domain model
$orders = array(array('customer' => 'Hansen', 'lines' => array(array('no' => 2000, 'descrip' => 'mursten'), array('no' => 3, 'descrip' => 'poser cement'))),
                array('customer' => 'Jensen', 'lines' => array( array('no' => 50, 'descrip' => 'planker'))));
// test domain model
foreach($orders as $order) {
    echo order_tostring($order);
}

?>


OO modellen og non-OO modeller er nogenlunde ekvivalente.

Og derfor kan non-OO modellen i et vist omfang vises med samme class diagram som OO modellen.

Det forudsaetter at non-OO modellen er lavet med bare en lille smule data struktur, men ........
Avatar billede Daniel.E Praktikant
17. november 2015 - 09:52 #8
Hej Arne,

Mange tak for dit eksempel, jeg forstår  godt hvor du vil hen, men jeg bliver nødt til at vise dette billede, for at klargøre noget.

http://www.comptechdoc.org/independent/uml/begin/domainmodel.gif

Dette er en domain model.


Hvordan vil du tage den kode du har skrevet, og tegne en domain model?
Avatar billede arne_v Ekspert
17. november 2015 - 14:12 #9
Med begge mine to eksempler vil du have en Order class og en OrderLine class.

Order har en attribut: customer.

OrderLine har to: no og descrip.

Der er en *..1 relation mellem Order og OrderLine.
Avatar billede arne_v Ekspert
17. november 2015 - 14:13 #10
Bemaerk at det jo forudsaetter struktur i dine arrays.

Hvis du har et indexeret array order_customer og to indexerede arrays orderline_no og orderline_descrip, saa er er det naeppe muligt at lave en domain model.
Avatar billede Daniel.E Praktikant
17. november 2015 - 14:18 #11
Ja, jeg kan godt se at din ide bygger på noget helt præcist, og min opbyggelse ikke i den retning. Jeg bliver nødt til at droppe domain modellen :)

Arne, du må godt ligge et svar som beskrevet tidligere. Jeg synes at du har givet nogle gode ideer :)


Tak for hjælpen :)
Avatar billede arne_v Ekspert
17. november 2015 - 14:27 #12
svar
Avatar billede arne_v Ekspert
18. november 2015 - 03:25 #13
Man dokumentered ogsaa data strukturer foer OO og UML.

Men typisk med brug af records.

Som PHP ikke har.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester