Zur Haupt­na­vi­ga­ti­on sprin­gen [Alt]+[0] Zum Sei­ten­in­halt sprin­gen [Alt]+[1]

Klas­sen­ent­wurf

Bei einem grö­ße­ren Soft­ware­pro­jekt ist die schwie­rigs­te Auf­ga­be, ge­eig­ne­te Klas­sen zu ent­wer­fen. Die Ent­wurfs­ent­schei­dun­gen be­ein­flus­sen hin­ter­her den Schwie­rig­keits­grad der Pro­gram­mie­rung ganz er­heb­lich. Bei einem guten Ent­wurf bleibt die Über­sicht­lich­keit ge­wahrt und Feh­ler wer­den ver­mie­den. Aber wie kann man einen ge­eig­ne­te Klas­sen fin­den?

Ge­schäfts­pro­zes­se

Grund­sätz­lich ist es zu­nächst ent­schei­dend, dass man sich dar­über klar wird, wofür die Klas­sen er­stellt wer­den. Lei­der wird oft­mals (auch in Schul­bü­chern) die Auf­ga­be ge­stellt, die Rea­li­tät in Klas­sen ab­zu­bil­den (z.B. den Fuhr­park eines Un­ter­neh­mens oder eine Bank). Diese Auf­ga­ben müs­sen schei­tern, da nicht klar ist, wel­che As­pek­te der Rea­li­tät von Be­deu­tung sind. Au­ßer­dem – und das ist noch ent­schei­den­der – ist nicht klar, wer eine Ak­ti­on aus­löst und wer nur auf Auf­trä­ge re­agiert (Be­kommt der Gärt­ner die Me­tho­de gie­ßen oder das Beet?). Daher muss die Auf­ga­be immer lau­ten: „Es soll ein Com­pu­ter­pro­gramm ge­schrie­ben wer­den, bei dem der An­wen­der fol­gen­de Ak­tio­nen durch­füh­ren kann...“. Der erste Schritt bei einem Soft­ware­pro­jekt muss also sein, die mög­li­chen Ak­tio­nen des Be­nut­zers zu iden­ti­fi­zie­ren. Er wird sie dann im Com­pu­ter­pro­gramm durch Kli­cken auf einen But­ton oder Aus­wahl eines Me­nü­punk­tes an­wen­den. Damit ist klar, wer die Ak­ti­on aus­löst. Die Ob­jek­te be­schrei­ben dann nicht mehr die rea­len Ge­gen­stän­de/Per­so­nen, son­dern spei­chern nur noch die In­for­ma­tio­nen, die das Com­pu­ter­pro­gramm ken­nen muss. Es ist dann bei­spiels­wei­se bei einem Bank­ver­wal­tungs­pro­gramm klar, dass ein Ob­jekt von der Klas­se Kunde, nicht mehr selbst aktiv wer­den kann, son­dern dass die Me­tho­de „ein­zah­len“ be­deu­tet, dass die Kun­den­da­ten so an­ge­passt wer­den sol­len, dass der an­ge­ge­be­ne Be­trag dem Konto gut­ge­schrie­ben wird. Dies ist ein gro­ßer Un­ter­schied.

Die Ak­tio­nen, die der An­wen­der aus­lö­sen kann, wer­den in der ob­jekt­ori­en­tier­ten Mo­del­lie­rung Ge­schäfts­pro­zes­se ge­nannt. Diese müs­sen in der frei­en Wirt­schaft zwi­schen Auf­trag­ge­ber und Soft­ware­fir­ma in einem Pflich­ten­heft exakt de­fi­niert wer­den. Spä­te­re Än­de­run­gen ma­chen einen ge­eig­ne­ten Klas­sen­ent­wurf oft­mals un­mög­lich.

Klas­sen iden­ti­fi­zie­ren

So­bald klar ist, wel­che Ak­tio­nen der An­wen­der mit dem Pro­gramm durch­füh­ren kön­nen soll, kann man sich auf die Suche nach ge­eig­ne­ten Klas­sen ma­chen. Dabei hilft es, in der Auf­ga­ben­stel­lung nach Sub­stan­ti­ven zu su­chen. Diese Sub­stan­ti­ve be­zeich­nen häu­fig Ob­jek­te oder At­tri­bu­te der Ob­jek­te, die für das Pro­gramm re­le­vant sind. Die Ob­jek­te soll­ten ab­ge­schlos­se­ne Ein­hei­ten dar­stel­len.

Gleich­ar­ti­ge Ob­jek­te wer­den in Klas­sen zu­sam­men­ge­fasst und füh­ren zu einem ers­ten Klas­sen­ent­wurf. Spä­ter kön­nen wei­te­re Klas­sen hin­zu­kom­men oder über­flüs­si­ge weg­ge­las­sen wer­den.

At­tri­bu­te und Me­tho­den

In den ers­ten Klas­sen­ent­wurf kön­nen nun auch die iden­ti­fi­zier­ten At­tri­bu­te auf­ge­nom­men wer­den. Dabei soll­te un­be­dingt dar­auf ge­ach­tet wer­den, dass nur die für das Pro­gramm re­le­van­ten In­for­ma­tio­nen ge­spei­chert wer­den. Die Rea­li­tät hält zu viele De­tails be­reit, als dass diese alle im Pro­gramm Be­rück­sich­ti­gung fin­den könn­ten.

Um die Ge­schäfts­pro­zes­se durch­füh­ren zu kön­nen, müs­sen die Ob­jek­te an­ge­spro­chen wer­den kön­nen. Sie müs­sen Auf­ga­ben er­le­di­gen oder In­for­ma­tio­nen lie­fern. Dazu kann es not­wen­dig sein, dass sie ih­rer­seits wei­te­re Auf­trä­ge an an­de­re Ob­jek­te er­tei­len. Diese Auf­trä­ge stel­len die Me­tho­den der Ob­jek­te dar und kön­nen in den Klas­sen­ent­wurf auf­ge­nom­men wer­den. Die für einen Auf­trag not­wen­di­gen In­for­ma­tio­nen müs­sen die Ob­jek­te ent­we­der selbst ken­nen, da sie in den At­tri­but­wer­ten des Ob­jekts ge­spei­chert sind, oder durch Pa­ra­me­ter beim Me­tho­den­auf­ruf mit­ge­teilt be­kom­men. Bei­spiel: ein­zah­len(dou­ble be­trag);

Ob­jekt­spiel

Es ist re­la­tiv schwie­rig, alle As­pek­te einer Klas­se von vorn­her­ein voll­stän­dig zu be­rück­sich­ti­gen, da in der Pra­xis viel­fäl­ti­ge In­ter­ak­tio­nen zwi­schen den Ob­jek­ten der ver­schie­de­nen Klas­sen auf­tre­ten. Um den Klas­sen­ent­wurf auf sta­bi­le­re Füße zu stel­len, bie­tet es sich an, die Ge­schäfts­pro­zes­se in einem Rol­len­spiel durch­zu­füh­ren. Die fol­gen­de Dar­stel­lung ist weit­ge­hend aus dem life³-Pro­jekt der Uni Pa­der­born über­nom­men1.

Dazu wer­den zu­nächst für die Klas­sen CRC-Kar­ten2 er­stellt. Das Kür­zel CRC steht für Clas­ses, Re­s­pon­si­bi­li­ties, Col­la­bo­ra­tors (Klas­sen, Ver­ant­wort­lich­kei­ten, Be­tei­lig­te). CRC-Kar­ten sind damit nichts an­ders als "Kar­tei­kar­ten", auf denen oben der Klas­sen­na­me, und in zwei Spal­ten dar­un­ter je die Ver­ant­wort­lich­kei­ten (Auf­ga­ben) und die Klas­sen, mit denen zur Er­le­di­gung die­ser Ver­ant­wort­lich­kei­ten zu­sam­men­ge­ar­bei­tet wer­den muss, ver­merkt wer­den:

Spie­ler

Ak­tio­nen

  • wür­felt
  • macht Ein­satz

In­ter­agiert mit:

  • Wür­fel

Die CRC-Kar­ten stel­len damit die nach außen sicht­ba­re Schnitt­stel­le zu den Ob­jek­ten dar. Die in­ter­nen (pri­va­te) At­tri­bu­te sind auf ihr nicht ver­merkt. Diese wer­den se­pa­rat auf einer Ob­jekt­kar­te fest­ge­hal­ten. Die CRC-Kar­ten leben davon, dass sie noch nicht so for­mal wie die Klas­sen­kar­ten sind und viele De­tails spä­ter noch fest­ge­legt wer­den kön­nen (z.B. not­wen­di­ge Pa­ra­me­ter) Da­durch wer­den spon­ta­ne Än­de­run­gen leich­ter.

Diese CRC-Kar­ten wer­den dann als Grund­la­ge für ein Rol­len­spiel ver­wen­det. Sie müs­sen für alle sicht­bar auf­ge­stellt wer­den. Die Schü­le­rin­nen und Schü­ler über­neh­men je­weils die Rolle eines Ob­jek­tes einer die­ser Klas­sen. Sie er­hal­ten dazu je eine Ob­jekt­kar­te, auf der sie den Namen des Ob­jekts, seine Klas­se und seine At­tri­but­wer­te zum ak­tu­el­len Zeit­punkt fest­hal­ten und dann wäh­rend des Spiels an­pas­sen.

Unter An­lei­tung des Leh­rers spie­len die Schü­ler ein­zel­ne Ab­läu­fe durch. Der Leh­rer stellt den An­wen­der des Com­pu­ter­pro­gramms dar, der die Ak­tio­nen von außen aus­löst, indem er bei­spiels­wei­se fest­legt, wer als ers­ter spricht. Diese „Star­tak­ti­on“ kann spä­ter ent­we­der in der UML-An­sicht durch Auf­ruf einer Me­tho­de er­fol­gen oder wird mit Hilfe einer GUI durch einen But­ton aus­ge­löst.

Der Leh­rer gibt also Auf­trä­ge an die Schü­ler/Ob­jek­te. Die Schü­ler dür­fen dabei nur die Auf­ga­ben ver­rich­ten, die auf ihren Klas­sen­kar­ten no­tiert sind. Hier­zu dür­fen sie auch Ob­jek­te der auf ihrer CRC-Karte no­tier­ten in­ter­agie­ren­den Klas­sen zur Mit­ar­beit auf­for­dern. Wei­ter­hin dür­fen sie nur von dem Wis­sen Ge­brauch ma­chen, das auf ihren Ob­jekt­kar­ten fest­ge­hal­ten ist.

Die Re­geln des Ob­jekt­spiels sind also:

  • nur ver­ba­le Kon­takt­auf­nah­men zu an­de­ren Ob­jek­ten sind er­laubt,

  • nur die auf den CRC-Kar­ten auf­ge­lis­te­ten Auf­trä­ge sind er­laubt,

  • nur mit den auf der CRC-Karte ver­merk­ten Be­tei­lig­ten darf Kon­takt auf­ge­nom­men wer­den,

  • es dür­fen nur die auf der Ob­jekt­kar­te ver­merk­ten At­tri­but­wer­te ver­wen­det wer­den ( "keine Ge­dächt­nis­leis­tung des Rol­len­in­ha­bers").

Bei die­sem Spiel müs­sen alle Ge­schäfts­pro­zes­se durch­ge­spielt wer­den. Mer­ken die Schü­ler dabei, dass die CRC-Kar­ten un­voll­stän­dig sind, dür­fen diese so­fort an­ge­passt wer­den. Feh­len In­for­ma­tio­nen auf den Ob­jekt­kar­ten dür­fen auch hier wei­te­re At­tri­bu­te hin­zu­ge­fügt wer­den.

Möch­te man das Thema Se­quenz­dia­gram­me im Un­ter­richt be­han­deln, dann bie­tet es sich an, wäh­rend des Ob­jekt­spiels einen Pro­to­kol­lan­ten zu be­stim­men, der fest­hält, wel­che In­ter­ak­tio­nen zwi­schen den Ob­jek­ten statt­fin­den. Das Er­geb­nis die­ses Pro­to­kolls ist dann im Prin­zip schon ein Se­quenz­dia­gramm.

Se­quenz­dia­gramm

Bei einem Soft­ware­pro­jekt, das meh­re­re Klas­sen und damit noch mehr Ob­jek­te um­fasst, ver­lie­ren die Schü­ler leicht den Über­blick über die In­ter­ak­tio­nen zwi­schen die­sen Klas­sen. Bei der Im­ple­men­tie­rung ist es spä­ter sinn­voll, diese ar­beits­tei­lig zu er­le­di­gen, da die Auf­tei­lung eines Pro­jekts in klei­ne, mög­lichst un­ab­hän­gi­ge Ein­hei­ten ein ent­schei­den­der Vor­teil der ob­jekt­ori­en­tier­ten Pro­gram­mie­rung ist. Das kann aber nur dann funk­tio­nie­ren, wenn alle Schü­ler die Zu­sam­men­hän­ge zwi­schen den Klas­sen ver­ste­hen und ab­so­lut klar ist, wel­che Funk­tio­nen die ein­zel­nen Me­tho­den er­fül­len sol­len. Dies ist ein wei­te­res Ar­gu­ment, das Ob­jekt­spiel durch­zu­füh­ren. Die­ser Ef­fekt wird noch ver­stärkt, wenn das Er­geb­nis des Ob­jekt­spiels als Se­quenz­dia­gramm fest­ge­hal­ten wird. Man kann aber auch auf die Se­quenz­dia­gram­me ver­zich­ten, wenn die Zeit im Un­ter­richt nicht aus­reicht. In den Bil­dungs­stan­dards sind sie nicht ge­for­dert.

Se­quenz­dia­gram­me sind neben UML-Dia­gram­men die wich­tigs­te Dia­gram­mart in der ob­jekt­ori­en­tier­ten Mo­del­lie­rung. Sie zei­gen, den Ab­lauf der In­ter­ak­ti­on zwi­schen den Ob­jek­ten. Man kann also gut er­ken­nen, wel­ches Ob­jekt wel­che Me­tho­de eines an­de­ren Ob­jekts auf­ruft. Es kann im Un­ter­richt nicht darum gehen, Se­quenz­dia­gram­me in der vol­len Tiefe ihrer Mög­lich­kei­ten zu be­han­deln oder die for­ma­le Dar­stel­lung zum Un­ter­richts­the­ma zu ma­chen. Es reicht eine sinn­ge­mä­ße Dar­stel­lung, die sich an die Se­quenz­dia­gram­me hält.

Im Se­quenz­dia­gramm wer­den die Ob­jek­te ne­ben­ein­an­der dar­ge­stellt. Von oben nach unten wird der zeit­li­che Ab­lauf vi­sua­li­siert. Dabei ist nicht der ex­ak­te Zeit­punkt, son­dern nur die Rei­hen­fol­ge der Auf­ru­fe ent­schei­dend. Jedes Ob­jekt hat eine Le­bens­li­nie, die mit dem Zeit­punkt der Er­stel­lung (new-Ope­ra­tor) be­ginnt. Ruft ein Ob­jekt eine Me­tho­de eines an­de­ren Ob­jek­tes auf, dann wird diese durch einen Pfeil sym­bo­li­siert. So­lan­ge die Me­tho­de aktiv ist, wird die Le­bens­li­nie zu einem di­cken Bal­ken. Der Rück­sprung zum auf­ru­fen­den Ob­jekt wird am Ende auch wie­der durch einen Pfeil sym­bo­li­siert. Ge­ra­de die­ses Hin- und Her­sprin­gen zwi­schen ver­schie­de­nen Ob­jek­ten und Me­tho­den ist am An­fang für Schü­ler nicht ein­fach zu durch­schau­en und wird durch das Se­quenz­dia­gramm un­ter­stützt.

Sequenzdiagramm zum Erzeugen eines neuen Craps-Spiels

Se­quenz­dia­gramm zum Er­zeu­gen eines neuen Craps-Spiels

Eine gute Übung ist es auch, einen fer­ti­gen Quell­text in ein Se­quenz­dia­gramm über­füh­ren zu las­sen. Dies för­dert das Ver­ständ­nis für den Quell­text, da genau ge­prüft wer­den muss, wel­che Me­tho­den­auf­ru­fe im Quell­text vor­kom­men und wel­che wei­te­ren Me­tho­den­auf­ru­fe die­ser Auf­ruf nach sich zieht. Zur Er­stel­lung von ein­fa­chen Se­quenz­dia­gram­men kann bei­spiels­wei­se das Pro­gramm Quick Se­quence Dia­gramm Edi­tor3 ver­wen­det wer­den.

Klas­sen­dia­gramm

An­schlie­ßend soll­te nun das voll­stän­di­ge Klas­sen­dia­gramm mit allen Be­zie­hun­gen zwi­schen den Klas­sen er­stellt wer­den. Dies ist keine grö­ße­re Schwie­rig­keit mehr, da alle Me­tho­den und At­tri­bu­te schon er­ar­bei­tet wur­den. Le­dig­lich die Be­zie­hun­gen zwi­schen den Klas­sen kön­nen noch dis­ku­tiert wer­den. Am Ende soll­te ein für alle ver­bind­li­ches Klas­sen­dia­gramm ste­hen, das even­tu­ell auch vom Leh­rer schrift­lich aus­ge­teilt wer­den kann, um si­cher­zu­stel­len, dass wirk­lich alle Schü­ler mit den glei­chen Klas­sen­de­fi­ni­ti­on ar­bei­ten. Nur dann ist die Im­ple­men­tie­rung des Soft­ware­pro­jekts ar­beits­tei­lig mög­lich.


1 Ob­jekt­spiel, life³-Pro­jekt Uni Pa­der­born, (Stand: 07.08.2012)

2 CRC-Kar­ten, life³-Pro­jekt Uni Pa­der­born, (Stand: 07.08.2012); Ur­sprüng­lich stammt die Idee der CRC-Kar­ten von Kent Beck (Apple Com­pu­ter, Inc.) und Ward Cun­ningham (Wyatt Soft­ware Ser­vices, Inc.). Zum Ori­gi­nal­ar­ti­kel, (Stand: 07.08.2012)

3 Quick Se­quence Dia­gramm Edi­tor, Mar­kus Strauch, (Stand: 08.08.2012); Die Se­quenz­dia­gram­me wer­den dabei in Form von Text­ein­ga­ben er­stellt. Die ver­füg­ba­re Hilfe und die Bei­spie­le muss man sich an­schau­en, um zu ver­ste­hen, wie es funk­tio­niert. Dann ist ein Se­quenz­dia­gramm aber schnell er­stellt.

 

 

Klas­sen­ent­wurf: Her­un­ter­la­den [odt][82 KB]

 

Wei­ter zu Vor­la­gen im Tausch­ord­ner