[OOP] Het uitdenken van een CMS

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Advanced Mendix Developer Order Management Systeme

Advanced Mendix Developer Order Management Systemen (NL) Den Haag HBO/WO IT Professional "Als Advanced Mendix Developer impact maken op de groeiende e-commerce markt? Je doet dit bij PostNL door met je DevOps team onze Mendix applicaties verder te ontwikkelen, waarbij je complexe logistieke business processen vertaalt naar applicaties die ons primaire proces ondersteunen". Wat ga je doen? PostNL wordt een postal tech company We nemen de ontwikkeling van onze IT applicaties in eigen hand door onze eigen software-ontwikkel-capability op te zetten. Als Advanced Mendix Developer ben je onderdeel van een multidisciplinair, agile werkend Business-IT-team. Samen met dit team bouw je onze logistieke IT-applicaties verder

Bekijk vacature »

Pagina: 1 2 volgende »

Milo S

Milo S

17/01/2013 19:36:59
Quote Anchor link
Goede avond allemaal,

Ik ben al enige tijd bezig met het uitdenken van een CMS. Ik probeer zoveel mogelijk functionaliteiten in te voegen zodat ik gelijk op veel punten terecht kom en zoveel mogelijk leer. Dat is immers het voornaamste doel van dit project.

Nu heeft Wouter J mij in een vorig topic behoorlijk geholpen. Aan de hand hiervan ben ik toch nog verder gaan zoeken naar uitleg over interfaces en abstract classes. Ik vroeg mij nu af gebruik ik het nu niet overkill? Is mijn huidige opzet wel OOP? Zou ik hiermee verder kunnen als ik een simpele cms wil bouwen? Mis ik dingen?

Mij nieuwe opzet is hier te vinden: klikerdeklik

Altijd in voor opbouwende kritiek.

Gr, Milo
Gewijzigd op 17/01/2013 19:37:48 door Milo S
 
PHP hulp

PHP hulp

17/10/2021 14:52:14
 
Moose -

Moose -

17/01/2013 20:07:57
Quote Anchor link
Een interface kan geen properties hebben, alleen maar methodes. Begrijp je daadwerkelijk de kracht(/zwakte) van een interface, of gebruik je ze alleen maar omdat Wouter dat zegt?
 
Nicky Monsma

Nicky Monsma

17/01/2013 20:10:07
Quote Anchor link
ik zou geen interfaces gebruiken het is negens voor nodig interfaces is bedoelt voor andere developers die kunnen dan kijken welke functions er in de class zit
 
Moose -

Moose -

17/01/2013 20:14:02
Quote Anchor link
Rustig aan Nicky, je kunt een stuk meer met interfaces dan kijken welke methodes er in een class zitten
 
Milo S

Milo S

17/01/2013 20:23:46
Quote Anchor link
Ik begrijp dat een interface als doel heeft een aantal methodes vast te zetten. Dit zou handig kunnen zijn om bijvoorbeeld in een userclasse een aantal waarde verplicht te stellen. Hiermee loopt dus nooit je hele systeem in de soep.
Niet waar? Persoonlijk lijken abstract klasse mij dan handiger in deze situatie omdat je dan niet dubbel werk zit te doen. Je kunt direct methodes waardes meegeven.
Als ik fout zit hoor ik dit graag.
 
Erwin H

Erwin H

17/01/2013 22:23:47
Quote Anchor link
Nicky Monsma op 17/01/2013 20:10:07:
ik zou geen interfaces gebruiken het is negens voor nodig interfaces is bedoelt voor andere developers die kunnen dan kijken welke functions er in de class zit

....

Interfaces, mits juist gebruikt, zijn zo ongeveer het belangrijkste van een OOP omgeving. Het stelt je namelijk in staat om de structuur van de classes vast te zetten, zonder er nog een implementatie aan te hangen. Als je zorgt dat alle (belangrijke, structuur) classes zijn gebouwd naar een interface, dan kan je later op een veilige manier een class vervangen door een andere class. Als alle public methods namelijk zijn gedefinieerd door een interface dan kunnen classes die gebruik van die nieuwe class dat zonder problemen doen.

Neem als voorbeeld een class die je data ophaalt vanuit het model. In eerste instantie doe je dit wellicht vanuit een simpel bestand, omdat de site klein in. Later wil je dat in een database stoppen. Geen probleem, zolang de controller het model aanroept via door de interface gedefinieerde methods, kan je eenvoudig het ene model door het andere vervangen. De controller weet het niet eens, die roept gewoon de bekende method aan.
Ook kan je door middel van type hinting verplicht stellen dat een class een bepaalde interface implementeert. Zo weet de ontvangende class zeker dat het doorgegeven object ook daadwerkelijk de bepaalde methodes implementeert.
 
Nicky Monsma

Nicky Monsma

17/01/2013 22:25:26
Quote Anchor link
Yeah Right you sucks dude
 
Erwin H

Erwin H

17/01/2013 22:27:38
Quote Anchor link
Milo S op 17/01/2013 20:23:46:
Persoonlijk lijken abstract klasse mij dan handiger in deze situatie omdat je dan niet dubbel werk zit te doen. Je kunt direct methodes waardes meegeven.

Kijk uit met het gebruik van abstracte classes en overerving. Dat is zo ongeveer het meest misbruikte onderdeel van OOP. Ja, het kan je dubbel werk schelen, maar het is niet altijd de beste manier. Het kan snel ook betekenen dat je bepaalde functionaliteit in een class hebt die je niet nodig hebt.

Als het gaat om het bepalen van welke methodes een class moet hebben, dan kan je dat beter via een interface regelen dan via een (abstracte) basis class.



Toevoeging op 17/01/2013 22:28:05:

Nicky Monsma op 17/01/2013 22:25:26:
Yeah Right you sucks dude

Dank je, ik ben blij dat je het zo sportief opneemt.
 
Nicky Monsma

Nicky Monsma

17/01/2013 22:29:46
Quote Anchor link
Graag gedaan :)
 
Reshad F

Reshad F

17/01/2013 22:30:00
Quote Anchor link
Milo het verschil tussen Abstracte klassen en interfaces is best wel groot naar mijn mening.

Een interface zegt je alleen maar welke methoden een klasse moet hebben. dit kan handig zijn wanneer een klas bepaalde methoden MOET hebben om te kunnen werken.

Het verschil tussen een interface en abstracte klassen is dat abstracte klassen gewoon klassen zijn maar buiten dat feit om kan je in een abstracte klasse dus ook al dingen voor definieren.

vb

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
abstract class Auto {
    
    private $color;

    public function __construct($color) {
        $this->color = $color;
    }


    public abstract function getBrand();

}


class Mercedes extends Auto {
    
    public function getBrand() {
        return 'Mercedes';
    }

}


?>


zoals je ziet wordt de kleur al voorgedefinieerd. het verschil tussen de abstracte klasse en de interface is dat je in een interface kale methoden hebt een soort van een contract om 100 huizen te bouwen op jou manier. bij een abstracte klasse moet je dan bijv 100 huizen bouwen met dezelfde kleur..

Toevoeging op 17/01/2013 22:31:44:

@nicky zou je een beetje op je taal kunnen letten?
 
Milo S

Milo S

17/01/2013 22:35:53
Quote Anchor link
Mensen, laten we het gezellig houden.

Erwin bevestigd hiermee mijn verhaal wat betreft interface en breid het zelfs veder uit.

Zijn er nog nog meer op of aanmerkingen, if kan ik hier dan wel mee uit de voeten?

@Reshad; ah zo had ik het niet begrepen vanuit de oop beginners handleiding van Joren
Gewijzigd op 17/01/2013 22:38:50 door Milo S
 
Reshad F

Reshad F

17/01/2013 23:10:09
Quote Anchor link
Joren heeft het volgens mij ook goed uitgelegd op zijn site.

Quote:
Een interface stelt je in staat om aan te geven dat een object een bepaalde functionaliteit moet bezitten, maar het bepaalt niet hoe het object dat moet doen. De child class is dus vrij om de hele implementatie te doen, zolang hij maar voldoet aan de functionaliteit die de interface afdwingt.


en hij somt ook de belangrijkste verschillen

Quote:
Abstract classes
Een abstract class kan bepaalde functionaliteit definiëren en de rest overlaten aan de child.
Een child kan de reeds gedefinieerde methods overschrijven, maar hoeft dat niet.
De child class moet een logische relatie hebben met de parent.
Een child kan maximaal een abstract class extenden.

Interfaces
Een interface kan geen functionalteit bevatten. Het is enkel een definitie van de methods die gebruikt moeten worden.
De child class moet alle methods uit de interface van functionaliteit voorzien.
Verschillende niet gerelateerde classes kunnen op een logische manier gegroepeerd worden door een interface.
Een child kan meerdere interfaces tegelijkertijd implementeren.
 
Milo S

Milo S

18/01/2013 06:12:10
Quote Anchor link
Ik heb dat anders begrepen.. Nu met jou voorbeeld ben ik daar uit. Ik zal het vanavond toepassen op het model om te kijken of ik het daadwerkelijk goed doe.

Maar we hebben het nu constant over de interfaces, maar ik vraag me ook af of iemand zou kunnen bevestigen dat derest van de logica goed zit?
 
Reshad F

Reshad F

18/01/2013 11:33:18
Quote Anchor link
Zou je dat hier willen posten ? :)
 
Wouter J

Wouter J

18/01/2013 11:34:34
Quote Anchor link
Reshad, die staat in het documentje waarnaar je linkt.

Milo, plaats liever niet hier. Misschien wel even uitwerken in een UML diagram en die hier plaatsen of even een pastbin aanmaken ofzo.
 
Milo S

Milo S

18/01/2013 13:09:45
Quote Anchor link
@ Reshad; ik upload steeds een Word documentje.

Ik zal zodra ik thuis ben kijken of ik een UML diagram kan maken. Dan upload ik die ook wel
 
Reshad F

Reshad F

18/01/2013 14:39:45
Quote Anchor link
Zet het dan in ieder geval op pastebin o.i.d. zoals wouterJ zegt want via word is het een beetje onoverzichtelijk. of inderdaad een UML diagram
 
Milo S

Milo S

18/01/2013 16:36:25
Quote Anchor link
Ik ben nu thuis en ga aan de slag met het maken van de UML. Hiervoor gebruik ik ArgoUML. Iemand andere programma's die wellicht beter / gemakkelijker zijn hiervoor?
 
Wouter J

Wouter J

18/01/2013 16:48:30
Quote Anchor link
Ik gebruik Visual Paradigm UML free edition, maar dat is niet echt makkelijk te noemen...
 
Milo S

Milo S

18/01/2013 17:45:11
Quote Anchor link
Dat is ArgoUML ook niet echt, vandaar dat ik het vraag... Ik ga het straks anders tekenen dan kan ik de tijd nemen voor Argo / Visual Paradigm UML

Toevoeging op 18/01/2013 19:38:50:

Ik heb hem maar even gewoon getekend op de computer. Bekijk hier het resultaat.
 
Reshad F

Reshad F

18/01/2013 23:06:52
Quote Anchor link
- role interface
Volgens mij hoef je hier een constructor alleen niet in een interface te zetten. dat is weer een voorbeeldje waarbij je een abstracte klasse kan maken. ( als je alleen de constructor mee geeft om iets te doen ) en deze extenden met zijn eigen methods.

idem dito voor de Customer.

Voor de UserMapper zou ik juist een interface gebruiken om de CRUD methods vast te leggen. ( Create, Read, Update en Delete )

idem dito bij de image mapper

en wat is Database een klasse of een interface?
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.