Avatar billede LilleUdvikler Nybegynder
16. oktober 2011 - 12:33 Der er 14 kommentarer og
1 løsning

OOP - hvad KUNNE man bruge det til?

Hejsa,

Jeg har kastet mig ud i noget OOP, som jeg finder utrolig spændene. Jeg har dog nogle kampe med det men sådan er det jo :o)

Jeg kunne egentlig godt tænke mig, at vide hvad man for eksempel kunne bruge det til? Altså:

- Hvad bruger i det meget til?

Jeg spørger fordi jeg har brug for nogle eksempler på, hvad der er nyttigt og hvad der ikke er.

På forhånd, tak :-)
Avatar billede LilleUdvikler Nybegynder
16. oktober 2011 - 12:58 #1
Jeg tænker på class :o)
Har i for eksempel et eksempel på, hvad i har brugt det flittigt på?
Avatar billede olsensweb.dk Ekspert
16. oktober 2011 - 13:32 #2
anvendes bla hvis du programmerer efter den lagdelte arkitektur ( http://www.google.dk/search?q=lagdelte+arkitektur )

fordele ved classes:
sikkerhed
genbrug af code (blackbox (gemmen tested komponent))
mange færdige komponenter se feks http://www.phpclasses.org/ (gratis, og man får ikke junk mail)
16. oktober 2011 - 15:21 #3
Jeg ser det således, at objekter og klasser bruges til at organisere store og komplikerede programmer og gøre dem overskuelige.  Jeg bruger det ikke til de småprogrammer jeg selv opfinder, såsom hjemmesiden for skakklubben, for det kan dårligt betale sig.  Men objekt orienteret programmering anvendes i udpræget grad i større programmer, såsom i content management systemer som Joomla og Drupal.  Hvis man der skal gå dybere end standard funktionerne, så skal man have et grundigt kenskab til objekt orienteret programmering. 

Du ved (fordi du allerede har kikket på objekt orienteret programmering) at software objekter har egenskaber (variable) og kan gøre ting (funktioner.)  Derved ligner de objekter i den fysiske verden.  Jeg har visse egenskaber, for eksempel styrke i mine benmuskler og kendskab til byen lagret i mine hjerneceller.  Jeg kan anvende mine egenskaber til for eksempel at gå til købmanden.  Min fætter på Als kan også gå til købmanden.  Hans benmuskler er stærkere end mine.  Til gengæld kender jeg byen bedre.  Men stort set kan man regne med, at mennesker kan gå til købmanden, men det kan blyanter ikke.  Blyanter har til gængæld andre egenskaber og kan udføre andre handlinger.Mennesker hører derfor til en anden klasse end skriveredskaber.    I grunden består min blyant og jeg af det samme, nemlig af atomer og molekyler.  Men man kan langt lettere få købt ind og skrevet breve, hvis man kan tænke på molekyler der hænger sammen til objekter, i klasser, end hvis man skal tænke på molekylerne enkeltvis.

Den side man ser i en Joomla baseret hjemmeside er et object i klassen View.  Alle siderne er forskellige (ligesom min fætter og jeg).  Alligevel har de meget til fælles.  For eksempel at de er synlige (det er det meste software ikke).  Alle view objekter hører i sidste ende til klassen JView hvor alle de fælles egenskaber og metoder er programmerede.  For eksempel har JView en funktion display().  Hvis programmøren er tilfreds med JViews display() kan han bruge den uden videre programmering blot ved at definere siden som et View objekt.  Men programmøren kan også vælge for de enkelte view objekter at programmere egne display() funktion.  Så bliver den brugt i stedet for JViews funktion.

Skønt alle siderne har en række fælles egenskaber, for eksempel at de kan ses, så ser de alle forskellige ud.  Så siden, view-objektet, kalder et objekt af klassen tmpl (betyder ikke template, for det er noget andet.)  I tmpl fastlægger programmøren om der skal være en tabel (med html elementer <table> <tr> <td> o.s.v.) eller nogle billeder, <img>'er, eller en sidebjælke med en menu, o.s.v.

De fleste sider man kikker på anvender data der kommer fra en database eller andre brønde.  For eksempel brugeren der logger ind kan se sine egne billeder eller vælge billeder sendt ind fra en anden bruger.  View objektet henter disse data fra et Model objekt der kommer fra klassen JModel.  JModel har metoder til at oprette forbindelse til databasen, foretage sql-queries, o.s.v. Det enkelte Model objekt kan så, for eksempel, have en metode getUserPictures() som sådan (i pseudo kode)

getUserPictures()
{
  $user = $_SESSION['user'];
  $result = SELECT ... FROM ...
  return $result;
}

Så view objektet henter de data der skal bruges på siden ved at kalde sit model objekt, og når de data er tilstede skubber view objektet dem ind in tmpl objektet og voila! brugeren ser hjemmesiden.

Så det store arbejde, og fejlfølsomme arbejde, det er at programmere det hele med hånden med php/html/js elementer kan gøres langt mere overskueligt ved at organisere egenskaber og funktioner i objekter der hører til klasser og som kalder hinanden.  Yderligere kan det gøres langt mere sikkert ved i stort omfang at anvende bestående og testede klasser.

Så ud over de egenskaber allerede nævnt i tråden vil jeg sige, at objekter og klasser i objekt orienteret programmering hjælper til at organisere store komplikerede programmerings opgaver og gøre dem overskuelige.
Avatar billede LilleUdvikler Nybegynder
16. oktober 2011 - 16:41 #4
Christian, hold da op et svar! Mange tak for det! :-)

Jeg har dog lidt svært ved, lige pt, at forstå det fuldt ud.

Jeg tænker lidt, at når man ser i de forskellige CMS at der står (bare et eksempel): buildMenu(1,1,2,3); har det så noget med en klasse at gøre, eller er det bare en function?

Jeg har lidt svært ved, at finde ud af hvad der foregår når man bruger funktioner til, at kalde hvad brugeren egentlig kunne tænke sig.

For eksempel så bruger InstansCMS buildNewFrontendMenu(1,2,3,4); (kan ikke lige huske parameterne) hvordan har de så konstrueret dette, kort forklaret? Har det noget med OOP at gøre el. hvordan?
16. oktober 2011 - 17:25 #5
kode såsom buildMenu(1,1,2,3) er en funktion.  Sådan en funktion kan så sidde frit i en kode eller være del af et object.  Hvis du ser kode såsom

$myview = new Menuview();
$myview->buildMenu(1,1,2,3);

så består der en klasse Menuview der, blandt andet, har en funktion buildMenu().  Med $myview = new Menuview(); bruger du denne klasse til at konstruere et nyt object med navnet $myview. Med $myview->buildMenu(1,1,2,3); kalder du så dette objects buildMenu() funktion.

Hvis du forstod object orienteret programmering fuldt ud, så ville det være mig der skulle spørge dig.  Det bygger på helt enkle og temmelig logiske og intuitive principper, men for det første skal man tillære sig de nye måder at tænke på (på den samme måde som en begyndende skier skal tillære sig en række nye reaktioner,) for det andet har man i tidens løb bygget videre på det så det er blevet en stor historie, og for det tredje bliver det brugt forskelligt i de forskellige programmeringssprog såsom Java og php.

Men, ja, det er spændende.  Held og lykke.
Avatar billede LilleUdvikler Nybegynder
16. oktober 2011 - 17:33 #6
Hej Christian,

Ja, det er bestemt spændene! :-)

Jeg har lige pt. faktisk ingen idé om, hvordan man fx. skulle lave en function som kunne lave en menu med nogle forskellige parametre. Er helt blank.

Tror måske det er for stor en mundfuld?
Avatar billede majbom Novice
16. oktober 2011 - 17:47 #7
der er i og for sig ikke nogen forskel i at lave en funktion som laver en menu og lave en metode (funktion i en klasse) - som der er blevet nævnt flere gange er en metode en funktion, den bliver bare kaldt på en anden måde.
16. oktober 2011 - 18:41 #8
Du har "kastet dig ud i noget OOP".  Hvordan arbejder du med det?  Nu du spørger mig, så er min anbefaling at få orden på værktøjskassen før du går igang med komplicerede konstruktioner.  Det har været mit held, at jeg på et tidspunkt fik chancen for et formelt kursus i programmering i Java, et sprog der er fuldstændigt objekt orienteret.  Med den baggrund har jeg uden store armbevægelser kunnet lære C# som også er objekt orienteret og php som ikke er født objekt orienteret men som i php4-5 har fået tilføjet objekt orienterede funktioner.  Jeg vil sige (hvis du ikke allerede gør det) find nogle tutorials og arbejd dig igennem dem, udfør alle kode eksemplerne o.s.v.  Hvis du googler på php oop tutorial eller lignende finder du nogle.  Når du har hold på det, så kunne du måske finde og downloade noget færdig kode der kan noget af det du vil, og så arbejde dig igennem det og sørge for at forstå det hele (eventuelt med hjælp her inde fra).  Så skulle de undre mig, om du ikke finder noget der snærper henad det du vil og vil kunne rette det til resten af vejen.
Avatar billede olebole Juniormester
16. oktober 2011 - 18:41 #9
<ole>

Det gode ved OOP er, at du netop ikke behøver at tillægge dig en ny tankemåde. Hele idéen bag OOP er at efterligne den måde, vi til dagligt opfatter vores omverden på.

Jeg er således en instans af klassen Menneske. Når man opretter en ny instans af klassen Menneske (=føder et barn), er instansen - grundet klassens opbygning - udstyret med forskellige egenskaber og metoder:


$ole = new Menneske(); // Opret instans (= fød et menneske)

print $ole->haircolor; // Skriver 'grå'
print $ole->age; // Skriver '56'

$ole->eat(); // Jeg sætter mig ned og spiser
$ole->sleep(); // Jeg lægger mig ned og sover


Hvis du kikker dig lidt omkring, vil du opdage, at dette er måden, vi langt hen ad vejen betragter/organiserer vores omverden på. Vi er med andre ord forlængst blevet enige om en objekt orienteret tolkning af den virkelighed, der omgiver os  =)

/mvh
</bole>
Avatar billede olebole Juniormester
16. oktober 2011 - 18:44 #10
Derudover er der masser af andre rent programmatisk begrundede fordele ved OOP: Lettere genbrug af kode, beskyttelse af private variabler og funktioner, osv, osv  =)
Avatar billede LilleUdvikler Nybegynder
18. oktober 2011 - 10:14 #11
Mange tak for jeres svar alle sammen,
Jeg har da fået en lidt bedre forståelse for OOP og vil prøve at gå i gang med nogle tutorials (som jeg allerede har været i gang med).

I hører nok fra mig igen, når der er noget jeg ikke kan finde ud af :-)

Splzz, christian og olebole, smider i ikke et svar hver?
18. oktober 2011 - 10:21 #12
Svar fra mig.
Avatar billede olebole Juniormester
18. oktober 2011 - 17:02 #13
Jeg samler ikke points - ellers tak  =)
20. oktober 2011 - 02:11 #14
LilleUdvikler, du bad om svar.  Det oprettede jeg, og andre afslog.  Hvad er nu dine videre planer med dette spørgsmå?
Avatar billede majbom Novice
22. oktober 2011 - 21:15 #15
havde sq overset der var mangel på svar :)

men hvad, jeg overlever nok de 7p ;)
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
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

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