Haszprus

Generikus konténer, objektumorientált hozzászólások

©   Haszprus   |   fejlesztés howto php
ha igazán OO akarsz lenni, akkor egy komment egy class, aztán csinálsz egy generikus container vagy lista class-t, és származtatsz belőle egy olyan class-t, amely csak kommenteket tartalmazhat
Tamás - Obi kérdés

Megvalósítva mindhárom (Preview Release 1) A megjelenítést még nem írtam meg szépre, de ott már csak néhány változót kell lecserélni. Ami eddig kész:

class Container {
   var $elements
   var $pointer
   var $length
   function Container()
   function addElement($element)
   function length()
   function getElement($i)
   function getNextElement()
   function removeElement()
   function setPointer($i)
}

class Comments extends Container {
   function Comments()
   function getCommentsByPostId($post_id)
   function show()
}

class Comment {
   var $row
   function Comment($row)
   function show()
}

Ez utóbbi show() még tiszta bug, értelemszerűen.

RSS: hozzászólások ehhez a bejegyzéshez 14 hozzászólás

Szólj hozzá Te is!


a Container-nek lehetne egy forAll függvény, ami egy megadott PHP hívást végrehajt az összes tárolt elemre (lásd még SML-ből a map függvény . és akkor a Comments class show-ja egyszerűen a forAll meghívása lenne minden egyes Comment show-jával.

3) moikboy (nem regisztrált)
Ha még OO-bb akarsz lenni akkor külön osztály végezze a kommentek megjelenítését makró-behelyettesítéses módszerrel.

forAll megvalósítva, most már azzal nyomja a komment_oo.php

Igen, SML rulezik nagyon, a map az egyetlen konkrétum, amire emlékszem belőle viszont a nyelv struktúrája kurvajóóó.

Na de szerintem Obinak nincs igaza. Amit obi csinál, az az, hogy típusos oop viselkedést követel meg tipizálatlan környezetben. Én ezt nem érzem előnyösnek.

Például az, hogy csinálsz egy generikus lista classt, önmagában azt jelenti phpnál, hogy az a class bármit tartalmazhat. Ha például írsz ennek a lista classnak egy metódust, ami minden elemének meghívja egy metódusát (a'la map), akkor ebben a környezetben egy különösen érdekes fícsör a c++-hoz szokott emberke számára, hogy akár teljesen különböző osztályok is lehetnek a listában, csak egy a lényeg: hogy mindnek legyen meg az adott metódusa.

C++-ban ehhez nemtriviális template-ezés kell. Csak phpnál alap.

Ez persze hátrányos is lehet. Nyilván egy lehetséges hozzáállás, hogy azt mondjuk, hogy csak egy adott classt engedünk meg, meg annak az öröklöttjeit. Ez szerintem csak korán kötött nyelvekben kell, hogy kikötés legyen.

Nem teljesen értem NCs hogy mire gondolsz az alatt, hogy obinak nincs igaza. Hogy szerinted nem kell olyan class, ami csak kommenteket tartalmazhat? Nos ennek a classnak azért van létjogosultsága, mert a kommentekhez nyilván kötődnek egyéb funkciók is, ami viszont kommentspecifikus (ld. create(), modify(), ...). Ezek sql vackait ugyan át lehetne adni paraméterben is, és ez végülis programozási stílus kérdése, de én jobbnak látom ha hatalmas paraméterezgetés helyett inkább több classom és functionöm van.


Tamás: lehet, hogy félreértelmeztem az eredeti blogbejegyzésben idézett szövegben, hogy ki idézett kitől.

Haszprus: nem arra gondolok, hanem arra, hogy én nem érzem nem oop-snak azt, ha a generikus lista osztályban egy nem túl erősen típusos nyelvnél nem vezetünk be külön kóddal olyan restrikciót, hogy a lista csak adott típusú elemeket tartalmazhat. Szerintem ez inkább a scriptnyelves oop játékok szépsége.


Napkelet Csillaga nem vezettem be külön restrikciót, 1xűen csak származtattam egy olyan osztályt a generikus konténeremből, aminek nem nagyon lenne értelme más adatokat megadni, mint kommenteket, tekintve hogy a tagfüggvényei csak azokat tudják kezelni

Ralesk: más normális nyelvekben is, csak annak olvashatóbb is a forráskódja

Ja igen, restrikció. Persze, külön be lehetne vezetni, de a PHP-t nyilván nem arra találták ki, hogy szigorú OOP módszereket követve lehessen benne programozni. Arra ott a C++ vagy esetleg a D.


esetleg az Ook és nagy elődje, a Brainfuck. utóbbit algelből kötelezővé kéne tenni vagy a Java2K. In Java2K, all functions have only a certain probability to do whatever the programmer intended them to do. de ajánlhatnám bármelyiket a Wikipédia ide vonatkozó oldaláról.

Hozzászólásod:


Nem vagy bejelentkezve, de...

A)
hozzászólhatsz regisztrálatlanul...

B)
ha regisztrálva vagy, bejelentkezhetsz...