Toon posts:

[OOP] Leggen van verantwoordelijkheden

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Beste Tweakers,

ik heb op dit moment een opdracht voor school om een Puzzel game te maken. Dit omvat bepaalde programmeer concepten en deze moeten in het programma terugkomen om hier een vervroegde vrijstelling voor te krijgen. Ik loop namelijk erg voor in dit vak en wil hiervoor vrijstelling krijgen zodat ik eerder kan beginnen aan andere blokken (Software Engineering 1, waar dit dus HEEL uitgebreid aan bod zal komen)

Ik heb dus nog nooit gewerkt met Class diagrammen en Abstractie van classes (dit krijg ik pas eigenlijk over 5 maanden mits ik deze vrijstelling behaal) echter wordt wel gevraagd een class diagram af te leveren van deze game (met een omschrijving wat al goed gekeurd is).

Nou heb ik na wat gelezen te hebben een aardig class diagram in elkaar gezet (verwacht er niet teveel van het omvat maar 4 classes) toch zit ik hier nog met vraagteken.

Ik heb 4 Classes: Form1, Puzzel, Stuk en Manager

In de class Form1 krijgt de gebruiker puzzel stukken te zien welke hij/zij kan verplaatsen dit gebeurd aan de hand van Mouse events. Hier wordt echter in de Form1 class gekeken of het stukje dat gesleept wordt binnen of buiten het puzzel veld wordt losgelaten en er wordt aan de hand hiervan het puzzel stuk correct geplaatst binnen Form1.

Nou is mijn vraag: welke class is hier nou eigenlijk verantwoordelijke voor (het controleren van het gesleepte stuk):
- Form1 omdat het om user input gaat in Form1
- Puzzel (deze is namelijk verantwoordelijk voor de plaatsing van de Objecten van het Type Stuk)

Als Puzzel dit zou moeten doen zou dit namelijk betekenen dat ik een "overbodige" method krijg in mijn puzzel class om te controleren of het stukje wel "correct" is geplaatst terwijl dit makkelijk in de Form1 MouseEvent kan worden afgehandeld.

Dit zal voor de ervaren software engineer een voor de hand liggend antwoord hebben, en ik zou hier graag een uitgesproken mening over willen horen.

Alvast bedankt voor jullie input O-)

[ Voor 7% gewijzigd door Verwijderd op 12-03-2009 21:39 ]


Acties:
  • 0 Henk 'm!

  • asfaloth_arwen
  • Registratie: Februari 2005
  • Laatst online: 14:55
Om te beginnen, verander de naam Form1 in iets meer beschrijvend.
Wat is de functionaliteit van de Manager klasse?

Overigens indien mogelijk geen Nederlandse namen gebruiken, imo.

Specs


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-09 02:21

Janoz

Moderator Devschuur®

!litemod

Als eerste wil ik beginnen met twee punten:
1 - Form1 is natuurlijk een ^& naam. Ik snap dat dat (Waarschijnlijk) default aangemaakt wordt, maar die naam geeft niet aan wat het is.
2 - Functionaliteit implementeer je niet in een mouseEvent.

Ik krijg het idee dat je alles aan je Form aan het ophangen bent. Dat moet je niet doen. Je moet juist beginnen bij je puzzel. Probeer te onderkennen uit welke onderdelen je probleem bestaat en hoe deze onderdelen zich tot elkaar verhouden. GUI is iets waar je juist niet mee begint.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
bedankt voor jullie snelle reacties,

De Form1 class is de GUI van het programma en heb deze expres even Form1 genoemd. Ook heb ik voor het gemak Nederlandse namen gebruikt voor mijn classes (in deze post) dit is verder ook niet relevant voor mijn vraag.

De verantwoordelijkheid van de manager class(static) is vrij klein en deze doet een geselecteerde afbeeldingen laden, resizen en geeft een object terug van het type puzzel. Even ter verduidelijking: ik hang totaal geen functionaliteit aan mijn Form1(GUI class) behalve tot zover de mouseEvents welke afkomstig zijn van de pictureBoxes welke in de GUI(Form1) worden getoond.

Deze pictureBox hoeft alleen te weten of deze binnen of buiten het oppervlakte van de gehele puzzel wordt losgelaten. Nou is dus mijn vraag wie dit moet "controleren"? Mijn gedachte is dus de puzzel class deze is verantwoordelijk voor de puzzel stukken (welke in een PictureBox worden getoond) en dus ook voor het plaatsen hiervan. Ik vraag mij alleen af hoe iemand anders hierover denkt :+

[ Voor 5% gewijzigd door Verwijderd op 12-03-2009 22:16 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Wellicht is kan je hier wat mee: MVC pattern.
Hiermee maak je een duidelijke scheiding tussen Model View en Controller.
In jou geval geef je dus door aan de controller waar de gebruiker het puzzelstukje wilt plaatsen, de controller koppeld dan terug of het op een legale plaats is of niet. Is dit wel het geval dan voert hij de wijziging ook door in het model. Zoniet dan wordt dit terug gekoppeld aan de gebruiker.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@ Khainer:
Ik zal hier eens naar kijken en ik denk (op het eerste gezicht) dat ik het ook ga oplossen zoals jij omschrijft via een "Controller" welke zal controleren of het puzzelstukje op de juiste positie is geplaatst. Het Model en View gedeelte bestaat eigenlijk al binnen mij diagram.

bedankt voor jullie reacties ;) hier kan ik wat mee!

[ Voor 10% gewijzigd door Verwijderd op 13-03-2009 12:27 ]


Acties:
  • 0 Henk 'm!

  • PietPuk.nl
  • Registratie: November 2008
  • Laatst online: 13-01 14:12
Ik weet niet of je nog op informatie zit te wachten. Ik ben zelf ook nog student en momenteel bezig met afstuderen.

Als vuistregel hanteer ik eigenlijk altijd dat het functionele deel van je applicatie voor 100% zou moeten werken zonder frontend. De functionele werking zou je dan kunnen testen d.m.v. unit tests. (JUnit voor Java, ik weet niet in welke taal je ontwikkeld).
Als je dat goed doet is het mogelijk om meerdere frontends aan je applicatie te koppelen (grafisch, command-line). Hang dus nooit functionaliteit in je GUI, alleen event handling. Je GUI vormt als het ware een proxy voor het aanroepen van je methoden in je functionele deel.

Mijn ervaring is dat studenten vaak teveel functionele dingen doen in event en GUI code. Houd dit goed in de gaten want het vergroot de modulariteit van je applicatie.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@ PietPuk.nl

Ik denk dat ik (voor mezelf) antwoord op mijn vraag heb gekregen, ook heb ik gister mijn vrijstelling gekregen aan de hand van het ingeleverde ontwerp met hierop weinig tot niks aan te merken. Verder is wat jij omschrijft het MVC principe (wat Khainer ook al zei) dit houdt dus in dat je GUI totaal geen functionaliteit mag hebben (wat je zelf ook al aangeeft) waardoor je in de toekomst makkelijk je software kan updaten met bijvoorbeeld een nieuwe interface, de functionaliteit gaat dan namelijk niet verloren ;) ik ga wel eens zoeken op die UnitTests waar jij het over hebt, ik programmeer zelf in C# met VS2008 en dit lijkt me namelijk reuze handig!

Verder is dit stof waar ik nu veel meer over zal gaan leren in een ander vak en vind dit gelukkig reuze interessant!
Pagina: 1