Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Traitsy
Forum PHP.pl > Inne > Hydepark
Stron: 1, 2
cojack
Wiecie co, jak wejdą te Traitsy w php a to już nie długo, to jak najszybciej będę chciał się przebranżowić z php na inny język, najbliżej mi do c++ albo javy.

Straszne rzeczy się będą działy w php...
nospor
Aj tam, a kto ci każe z nich korzystać? Nie chcesz to nie używaj.

Gorzej, gdy będziesz musial poprawiać kod po kimś, ale z tym zawsze są problemy niezależnie od traitsów a zalezne od wyobraźni pierwszego autora kodu wink.gif
cojack
Przecież te Traitsy nie będą miały nic wspólnego z polimorfizmem, co innego gdyby się dało użyć traitsu tylko takiego samego typu interfejsu, ale nie, tam sobie będziesz mógł zrobić latająco-szczekający-pływający but.
marcio
tez nie widze korzysci tego mechanizmu...jedyne co to bedzie spaghetti code....czy jest odpowiednik tych traits'ow w python'ie czy C#?!?Pytam bo moze jest a nie wiem chociaz watpie
el.pablo.72
Nie przesadzajcie, po pierwsze co całkiem użyteczny mechanizm jeśli będzie z głową używany (jak wszystko w programowaniu), po drugie od czego jest phpDoc, trzeba pisać komentarze.
wookieb
Wymienię parę elementów, które tylko skorzystają na traitsach.
EventDispatcher
Iterator
Collection
Mocki/Stuby

Dlaczego?
  1. trait EventDispatcher {
  2. // cos
  3. }
  4.  
  5. class Module {
  6.  
  7. }
  8.  
  9. class SpecialModel extends Module {
  10. use EventDispatcher; // bo np tylko w tym module jest mi potrzebny
  11. }

Oczywiście php znów spieprzył sprawę ponieważ traitsy powinno móc dodawać przy tworzeniu instancji klasy
  1. $object = new Module with EventDispatcher; // Tego nie ma w php a powinno być


Jak naprawdę głęboko się zastanowicie to Traitsy odwalają za was cała masę roboty. Należy ich tylko umiejętnie używać.

Jak wyglądałby powyższy przykład w aktualnym php?
  1.  
  2. interface EventDispatcher_Interface {
  3. // metody
  4. }
  5.  
  6. class Module {
  7.  
  8. }
  9.  
  10. class SpecialModule extends Module implements EventDispatcher_Interface {
  11. // i tutaj PRZEPISUJESZ (tak dokładnie) implementację metod event dispatchera
  12. // ale po co? marnujesz pamięć a traitsy zrobią to za Ciebie znacznie wydajniej i szybciej!
  13. }


Zastanówcie się zanim zaczniecie wieszać psy nad rzeczami, które po prostu nie rozumiecie.

Nie zamierzam dyskutować nad sensem traitsów z osobami, które nie wyszły z poziomu "Po co obiekty? Przecież wystarczą mi tablice i prefixowane funkcje!" oraz tych które nie rozumieją, że przy tworzeniu klas bardzo ważny jest ich minimalizm a nie pakowanie całej masy funkcjonalności (bardzo często nie korespondujących z założeniem klasy) bo "potem mogą się przydać". To takie uprzedzenie przed głupimi postami właśnie w powyższym stylu smile.gif
ixpack
Ja Panowie może i nie mam tyle doświadczenia co Wy i chciałem się zapytać jak interpretujecie poniższy cytat:
"A Trait is intended to reduce some limitations of single inheritance by enabling a developer to reuse sets of methods freely in several independent classes living in different class hierarchies."
- interpretacja to nie tłumaczenie...

IMO mogą się przydać w mniejszych i większych aplikacjach. Gdy masz swoje biblioteki klas, lub kogoś klasy i chciałbyś użyć po części z wcześniejszych kodów - używasz traits i masz "jakby nową klasę" z funkcjami kilku wcześniej napisanych. Taki pakiet funkcji wyciągniętych ze starszego kodu.
Skomplikowałem to :/.
Czasem szybciej coś zbudować mając wszystko w jednym miejscu, które Tobie pasuje. Fakt można zrobić wtedy kombajn do wszystkiego i niczego, ale np. (ja tak myślę i prosiłbym o nakierowanie - bez wulgaryzmów hehe o ile błędnie myślę):
Mam wiele klas, w nich wiele metod. Buduję nową aplikację i potrzebuje po jednej metodzie pasującej do mojej przyszłej aplikacji z każdej klasy - używam traits, aby mieć wszystko w jednym miejscu i później już z górki. Trochę to takie na siłę i pewnie nie będę tego używał - podobnie jak systemów szablonu.

Mi marzy się framework, który można po swojemu ustawić. Tzn. Jakaś baza softu + klasy, funkcje pisane przez wszystkich innych i mnie. Mały framework, ale wariat.
Te traits'y mogłyby takiemu frameworkowi pomóc. Np. wyobraźcie sobie wiele wiele wiele klas w chmurze, z chmury te kawałki klas sobie doklejasz do swojego serwisu poprzez panel administracyjny -> zagrożenie olbrzymie, ale w teorii fajnie by to funkcjonowało. Ale wiadomo teoria z praktyką ma nie za dużo wspólnego i IMO traitsy będą, nie każdy tego będzie używał, ale czy to tak wielce zmienia cały PHP żeby od niego odchodzić?
wookieb
Cytat(cojack @ 25.10.2011, 13:08:49 ) *
Straszne rzeczy się będą działy w php...

Już się dzieją straszne rzeczy w php-cu nawet pomimo możliwości jaki oferuje. Ale to nie wynika koniecznie z języka ale naturalnego schematu "Wpadnięcia w sidła sukcesu". To tak samo jak z internetem i trollami.
cojack
Nie dali wielodziedziczenia bo można byłoby burdel robić, to dają traitsy by robić jeszcze większy. Nie no dla mnie osom.
scanner
Cytat(wookieb @ 25.10.2011, 13:51:57 ) *
Wymienię parę elementów, które tylko skorzystają na traitsach.(...) Zastanówcie się zanim zaczniecie wieszać psy nad rzeczami, które po prostu nie rozumiecie. (...)

Mogę Cię cytować?
wookieb
Cytat(scanner @ 25.10.2011, 14:17:04 ) *
Mogę Cię cytować?

Ale o co chodzi?
hwao
Pomysł połączenia interfejsu + traits (w jedno) to dopiero chory pomysł - interfejs powinien pozostać interfejsem, inaczej stal by się klasą.

Cytat("cojack")
Wiecie co, jak wejdą te Traitsy w php a to już nie długo, to jak najszybciej będę chciał się przebranżowić z php na inny język, najbliżej mi do c++ albo javy.

Przecież w Javie masz multidziedziczenie którego 'ulepszoną wersją' i rozwiązująca wiele problemów as własnie traits.
Ponadto:
"Traits class, a template class in the C++ programming language"
Więc proszę rozwiń jakoś swoją myśl.

A tak korzystając z traits możesz w klasie wskazać że korzystasz z konkretnego interfejsu (który jest już) i korzystając z triats zaimplementować go z głową.
Od jakiegoś czasu jest w PHP GoTo i jak była wprowadzana to ludzie też mówili że będzie masakra.
W gronie dobrych programistów Traits to świetne rozwiązanie w projektach, jeżeli myślisz ze czas zmienić język z tego powodu że ktoś będzie tego głupio używał, może powinieneś pomyśleć o zmianie ekipy?
scanner
Cytat(wookieb @ 25.10.2011, 14:20:33 ) *
Ale o co chodzi?

O to, że Twój post bardzo mi się spodobał i jełsi z kimś o traitsach będę dyskutował, to na pewno się na niego będę powoływał - obrazuje bowiem też moje zdanie na temat tego "ficzera"
wookieb
Cytuj cytuj smile.gif
marcio
poczytalem troche o tych traitsach i na pierwszy rzut oka to wydaja sie niepotrzebne jednak ten wpis http://blog.wsoczynski.pl/2011/03/22/jezyk...hp-pt-3-traits/ rozjasnil mi troche idee ciekawa ta roznica pomiedzy dziedziczeniem poziomym a pionowym
blooregard
Cytat(wookieb @ 25.10.2011, 14:39:06 ) *
Cytuj cytuj smile.gif


Dodaj sobie do stopki: "@wookieb - cytowany przez najlepszych" biggrin.gif biggrin.gif biggrin.gif


by_ikar
Nie no jak ktoś ma zamiar wszędzie, do każdej jednej klasy używać triatsa to będzie to przesada. Ale tak jak są podobne obiekty, które mają podobną funkcjonalność triats dla nich jest całkiem fajnym rozwiązaniem. No tak mamy dziedziczenie, klasy abstrakcyjne, problem w tym że nie da się więcej niż jednej klasy dziedziczyć. A ludzie co robią konkretne spaghetti to pewnie nawet nie będą wiedzieć o takiej funkcjonalności wink.gif
nrm
Boje się traitsów po phpcon... wink.gif -> https://twitter.com/#!/supernrm/status/...483177193943041
marcio
@normanos carpe diem

btw:
widze ze php idzie na dobra droge nawet type hinting wprowadzili nie jest zle
blooregard
Cytat(marcio @ 25.10.2011, 15:03:54 ) *
@normanos carpe diem

btw:
widze ze php idzie na dobra droge nawet type hinting wprowadzili nie jest zle



Przydałby się ten type hinting do każdego typu danych, a nie tylko Object i Array wink.gif
Ale to też podobno ma być.
marcio
juz jest commit dla wszystkich typow ale to chyba jakas alpha czy cos na tym blogu co podalem link wyzej.

edit:
http://blog.wsoczynski.pl/2010/05/21/typowane-funkcje-w-php/
cojack
Cytat(hwao @ 25.10.2011, 14:22:27 ) *
Pomysł połączenia interfejsu + traits (w jedno) to dopiero chory pomysł - interfejs powinien pozostać interfejsem, inaczej stal by się klasą.


Przecież w Javie masz multidziedziczenie którego 'ulepszoną wersją' i rozwiązująca wiele problemów as własnie traits.
Ponadto:
"Traits class, a template class in the C++ programming language"
Więc proszę rozwiń jakoś swoją myśl.

A tak korzystając z traits możesz w klasie wskazać że korzystasz z konkretnego interfejsu (który jest już) i korzystając z triats zaimplementować go z głową.
Od jakiegoś czasu jest w PHP GoTo i jak była wprowadzana to ludzie też mówili że będzie masakra.
W gronie dobrych programistów Traits to świetne rozwiązanie w projektach, jeżeli myślisz ze czas zmienić język z tego powodu że ktoś będzie tego głupio używał, może powinieneś pomyśleć o zmianie ekipy?


Panie Hwao Ty mi tu nie myl typów generycznych z traitsami, ja Cię bardzo proszę.

@edit aa i w Javie nie ma wielodziedziczenia.
Crozin
@cojak: W jaki niby sposób Traitsy miałby niszczyć polimorfizm czy inne cechy kodu? Przecież to nic innego jak rozbicie kodu klasy na kilka plików / bloków. Ostatecznie o ile dobrze się orientuję obiekt utworzony na podstawie klasy korzystającej z traitstów będzie zachowywał się dokładnie tak samo jak ten utworzony na podstawie klasy gdzie zamiast use Abc będzie przekopiowany kod traitsa(u?) Abc. No może w Reflection API pojawi się kilka nowych metod pozwalających taką zmianę wychwycić.

Nie mniej jednak sam mocno wątpię w to, by ten bajer cokolwiek zmienił. Po prostu w normalnym kodzie, zbyt rzadko zdarza się by w różnych klasach powtarzał się dokładnie ten sam fragment implementacji czegoś. Co więcej, gdy już taki fragment się znajdzie trzeba się będzie mocno zastanowić czy jego wydzielenie ma po prostu sens. W końcu w miarę normalny kod "wykorzystuje" zasadę DRY, a traits'y potrzebują takich potworków by mieć w ogóle co zastępować.

@wookieb: Gdyby traitsy wybierało się w momencie tworzenia obiektu to by była dopiero tragedia. Koniec, końców PHP stara się implementować klasyczny, oparty na klasach, statyczny model obiektowy. Cała reszta języka jest do takiego modelu przystosowana oraz programiści są do takiego modelu przyzwyczajeni (chociaż w sumie patrząc po ilości __get'ów i __set'ów tutaj na forum mam co do tego spore wątpliwości). W Scali, którą się chyba inspirowałeś pisząc to, też nie wygląda to tak z tego co się orientuję.
Speedy
Traitsy, to nie jest wcale taki głupi pomysł. Można je potraktować chociażby jako pewien ekwiwalent dla wzorca dekorator. Można dzięki temu skorzystać z zalet wielodziedziczenia znanego z C++ bez konieczności wprowadzania go. Samo wielodziedziczenie nie jest najlepszym pomysłem, ale traitsy, jak sama nazwa wskazuje, dodają nowe cechy do istniejących klas. W niektórych sytuacjach może to być przydatne. Dotychczas, aby skorzystać z takich możliwości trzeba było albo tworzyć złożoną strukturę klas, które po sobie dziedziczą, albo zagnieżdżać obiekty w klasach. Dodatkowo, możemy też zmieniać widoczność metod w klasach. Nikt nikomu nie każe korzystać z traitsów, ale dodają one nową funkcjonalność do PHP i moim zdaniem jest to fajna sprawa.
Crozin
@Speedy: Tak na moje oko, w większości przypadków o jakich piszesz w powyższym poście doszłoby do złamania jednej z fundamentalnych zasad OOP - jeden obiekt, jedno zadanie. A akurat złamanie jej, w przeciwieństwie do wielu innych "zasad OOP", z definicji prowadzi do beznadziejnego kodu.
lukasz_test
Cytat(hwao @ 25.10.2011, 14:22:27 ) *
Pomysł połączenia interfejsu + traits (w jedno) to dopiero chory pomysł - interfejs powinien pozostać interfejsem, inaczej stal by się klasą.


Przecież w Javie masz multidziedziczenie którego 'ulepszoną wersją' i rozwiązująca wiele problemów as własnie traits.
Ponadto:
"Traits class, a template class in the C++ programming language"
Więc proszę rozwiń jakoś swoją myśl.

A tak korzystając z traits możesz w klasie wskazać że korzystasz z konkretnego interfejsu (który jest już) i korzystając z triats zaimplementować go z głową.
Od jakiegoś czasu jest w PHP GoTo i jak była wprowadzana to ludzie też mówili że będzie masakra.
W gronie dobrych programistów Traits to świetne rozwiązanie w projektach, jeżeli myślisz ze czas zmienić język z tego powodu że ktoś będzie tego głupio używał, może powinieneś pomyśleć o zmianie ekipy?


Dla mnie traitsy to właśnie wielodziedziczenie czego brakuje w php a jest w innych językach.
Crozin
@lukasz_test: Traitsy to nie wielodziedziczenie - i całe szczęście.
marcio
Cytat(Crozin @ 25.10.2011, 19:43:17 ) *
@lukasz_test: Traitsy to nie wielodziedziczenie - i całe szczęście.

Ale w pewnym sensie moze lepiej odwalac ta role niz interfejsy ktore jak do tej pory w php byly uznawane za "ulomne" wielodzdziczenie.

A dwa mogloby sie to przydac przy robieniu wyspecjalozowanych klas do jakis czynnosci ktore na podstawie danego traits'u zahowywalyby sie w pewny sposob.Lub moglyby pomoc przy tworzeniu filtrow jesli mozna jakos dynamicznie ladowac traitsy...
Crozin
Interfejsy nigdy nie miały służyć za wielodziedziczenie (implementacji). Zostały stworzone właśnie w celu pozbycia się wielodziedziczenia.

Ad. "A dwa": Też niespecjalnie się do tego nadają. Można to, o ile Cię dobrze zrozumiałem, z pełnym powodzeniem zrealizować przy pomocy "normalnego" kodu. Jeżeli chcesz drążyć temat pokaż jakiś pseudokod ilustrujący Twoje założenie.
marcio
Skoro sa to cechy to wedlug mnie jako filtr bbcode te traitsy lepiej sie zdaja niz jaka kolwiek klasa czy interfejs...poprostu dodamy odpowiednia ceche do obiektu/metody...
  1. <?php
  2.  
  3. trait BbCodeParse
  4. {
  5. public function parse($object)
  6. {
  7. return '<code>'.$object.'</code>';
  8. }
  9. }
  10.  
  11. class Comments
  12. {
  13. //tutaj np wstrzykiwanie nazwy traits'u dynamicznie za pomoca jakies konfiracji czegokolwiek
  14. use BBCodeParse { parse as protected; }
  15.  
  16. public function getComment()
  17. {
  18. //bla bla pobieramy i takie tam
  19. return $this -> parse($string)
  20. }
  21. }
  22.  
  23. ?>

Byc moze zle to interpretuje nie potrafie tak tego teraz pokazac na kodzie ale z samej idei czym sa traits'y ja to tak odbieram.
Owszem mozna to zrobic za pomoca zwyklej klasy jak juz wspomniales ale to wedlug mnie byloby bardziej trafne...

Cytat
Interfejsy nigdy nie miały służyć za wielodziedziczenie (implementacji). Zostały stworzone właśnie w celu pozbycia się wielodziedziczenia.

Nie powiedzialem ze mialy do tego sluzyc lecz tylko symulowac w pewnym sensie ich dzialanie czyli dajac nam mozliwosc wymuszania na pewych klasach uzywania pewnego "intergejsow" metod.
Crozin
@marcio: Dependency Injection - domyślam się, że wiesz co to jest. Mam jeszcze wymieniać dlaczego jest znacznie lepsze od tego co podałeś?
marcio
Wiem co to jest DI

Wiesz jak masz chwile czasu podaj argumenty dlaczego jest lepsze...nie twierdze ze jest zle ale jako ze nie implementowalem nigdy traits'ow nie wiem jakie niosa korzysci i wady...a z samego pseudo kodu duzo wyniesc nie potrafie wink.gif
Crozin
1. Coś takiego jak parser BBCode to rozbudowana struktura wielu obiektów - nie wiem skąd w ogóle pomysł by takie coś realizować trailsami.
2. Różnica niemal taka sama jak przy korzystaniu z Singletona - tworzenie "z dupy" zależności, globalnych odwołań do innych zasobów, brak możliwości wygodnego testowania, ponownego używania kodu itp. itd.

wookieb
Cytat(Crozin @ 25.10.2011, 18:19:19 ) *
W Scali, którą się chyba inspirowałeś pisząc to, też nie wygląda to tak z tego co się orientuję.

A właśnie wygląda to tak.
http://www.artima.com/scalazine/articles/s...it_pattern.html
marcio
Cytat
1. Coś takiego jak parser BBCode to rozbudowana struktura wielu obiektów - nie wiem skąd w ogóle pomysł by takie coś realizować trailsami.

Nie wydaje mi sie zeby tego typu argument byl trafny co z tego ze ma wiele obiektow?
cojack
Cytat(Crozin @ 25.10.2011, 18:19:19 ) *
@cojak: W jaki niby sposób Traitsy miałby niszczyć polimorfizm czy inne cechy kodu? Przecież to nic innego jak rozbicie kodu klasy na kilka plików / bloków. Ostatecznie o ile dobrze się orientuję obiekt utworzony na podstawie klasy korzystającej z traitstów będzie zachowywał się dokładnie tak samo jak ten utworzony na podstawie klasy gdzie zamiast use Abc będzie przekopiowany kod traitsa(u?) Abc. No może w Reflection API pojawi się kilka nowych metod pozwalających taką zmianę wychwycić.


Kurde, dochodzę do wniosku że fora to nie są dobre miejsca na prowadzenie takich dyskusji, bo mnie się nie chce opisywać tego wszystkiego ;/ Sorry Crozin, ale na prawdę dużo mam przeciwko traitsom a nie opiszę tego tutaj. Dla mnie to jest anty OOP.

Pomyśl sobie że masz strategię, przekazujesz sobie obiekt i wywołujesz metodę której nie ma nawet interfejs! To będzie dopiero...
Cysiaczek
Przecież musisz zadeklarować że dany obiekt używa danego traits, więc należy to do interfejsu tego obiektu. Obecnie więcej szkody przynoszą metod magiczne, zwłaszcza __call(). To dopiero gmatwa interfejs. Traits w zamyśle ma magię wyeliminować.
Kolejna sprawa, podnoszona już tutaj, nikt nie zmusza do korzystania z tego. Na poziomie opracowywania standardu kodowania w firmie/grupie można traitsy wyeliminować.
Jeśli chodzi o to, że ludzie zaczną "na pałę" tego używać i zrobi się syf, to bym się nie martwił, bo to ich kod i ich problem.
Crozin
@cojack: Zakładasz wątek w charakterze "OMFG Traitsy nadchodząexclamation.gif! Będzie syf i burdel!!!!" po czym na prośbę o podanie konkretów dlaczego tak uważasz piszesz, że Ci się nie chce, a dyskusje z nami są bez sensu. Czego Ty oczekiwałeś po tym wątku?

Cytat
Pomyśl sobie że masz strategię, przekazujesz sobie obiekt i wywołujesz metodę której nie ma nawet interfejs! To będzie dopiero...
Ty chyba nie rozumiesz czym traitsy mają być w założeniu.
  1. interface SomethingAwareInterface {
  2. public function setSomething(Someting $something);
  3. }
  4.  
  5. interface CommandInterface {
  6. public function execute();
  7. }
  8.  
  9. trait SomethingAwareTrait {
  10. private $something;
  11.  
  12. public function setSomething(Someting $something) {
  13. $this->something = $something;
  14. }
  15. }
  16.  
  17. class MyAbcClass implements SomethingAwareInterface, CommandInterface {
  18. use SomethingAwareTrait;
  19.  
  20. public function execute() {
  21. ...
  22. }
  23. }
  24.  
  25. class MyDefClass implements SomethingAwareInterface, CommandInterface {
  26. private $something;
  27.  
  28. public function setSomething(Someting $something) {
  29. $this->something = $something;
  30. }
  31.  
  32. public function execute() {
  33. ...
  34. }
  35. }
  36.  
  37. // ------------------
  38.  
  39. public function run(CommandInterface $command) {
  40. if ($command instanceof SomethingAwareInterface) {
  41. $command->setSomething($this->something);
  42. }
  43.  
  44. $command->execute();
  45. }
Klasy MyAbcClass i MyDefClass są "tak samo OOP". No chyba, że powiesz dlaczego niby nie.

PS. Tak jakbyś nie zauważył, również nie jestem zwolennikiem traitstów. W powyższym przykładzie ich użycie naprawdę niczego nie daje.
cojack
  1. class MyAbcClass implements SomethingAwareInterface, CommandInterface {
  2. use SomethingAwareTrait;
  3.  
  4. public function execute() {
  5. ...
  6. }
  7. }


to ścierwo zadziała? to mnie dobiłeś sleep.gif
marcio
Nie powiela sie kodu...ale w takim razie to moznaby klase abtrakcyjna uzyc..wedlug mnie ich uzycie wyjdzie w praniu jak wyjdzie php 5.4 z traitsami i ludzie zanczna ich uzywac i o nich pisac.

Cytat
Jeśli chodzi o to, że ludzie zaczną "na pałę" tego używać i zrobi się syf, to bym się nie martwił, bo to ich kod i ich problem.

I tak bedzie ich uzywalo 5% koderow z czego 4% miejmy nadzieje ze uzyje je z glowa a nie na chama jak juz wspominaliscie

btw:
@cojack ale jestes uparty...zawsze jestes przeciw wszystkim i wszystkiemu wink.gif ciekawe...
nospor
Cytat
to ścierwo zadziała

@cojack zmień ton wypowiedzi, albo możliwość wypowiadania zostanie ci zabrana.
Na dodatek zakładasz wątek o czymś, a gdy ludzie zaczynają przedstawiać kontraargumenty to wyjeżdzasz z dziecinnym tekstem:
Cytat
Kurde, dochodzę do wniosku że fora to nie są dobre miejsca na prowadzenie takich dyskusji, bo mnie się nie chce opisywać tego wszystkiego

NIe chcesz dyskutować to nie dyskutuj. Nikt ci nie każe. Idź napisz arta na blogu i zastrzeż ze nie zaakceptujesz komentarzy, które z Tobą się nie zgadzają i po sprawie. Oszczędzisz nam i sobie nerwów.
cojack
Cytat(marcio @ 26.10.2011, 11:24:58 ) *
btw:
@cojack ale jestes uparty...zawsze jestes przeciw wszystkim i wszystkiemu wink.gif ciekawe...


marcio bo jak człowiek zrozumiał stwierdzenie: "Przekładaj kompozycję nad dziedziczenie" a tu Ci wyjeżdżają z "anty wzorcem" lepiej by AOP zrobili.
Crozin
@cojack: Możesz podać jakikolwiek konkret? Co (w tym moim śmiesznym przykładzie) w klasie MyAbcClass jest anttywzorcem, antyoop czy po prostu złe względem klasy MyDefClass? Pomijając, że ta ostatnia jest wygoniejsza w prawdziwym użyciu. Jakbyś jeszcze to w dwóch - trzech zdaniach uzasadnił to już w ogóle by bajka była.
cojack
To że klasa MyDefClass nie posiada fizycznie metody setSomething a implementuje interfejs który wymusza jej posiadanie.
wookieb
Posiada. Dzięki Traitsom. A tak naprawdę to crozin podał zły przykład.

Ale powtarzam i powtarzałem. To nie psuje oop. Da się taką samą funkcjonalność zrealizować bez traitsów tylko w mniej wydajny sposób, więc jak się zastanowisz to NIC nie jest zachwiane.
cojack
DI enginowy?
wookieb
To nie ma kompletnie NIC wspólnego z DI.
cojack
A to ciekawe.
Crozin
Cytat
To że klasa MyDefClass nie posiada fizycznie metody setSomething a implementuje interfejs który wymusza jej posiadanie.
Posiada. Traitsy działają trochę jak preprocesor, "doklejają" odpowiedni kod z zew. zasobu. W wyniku pracy obie klasy są de facto dokładnie takie same.

Cytat
A tak naprawdę to crozin podał zły przykład.
Co jest w nim złego?
cojack
Cytat(Crozin @ 26.10.2011, 13:28:28 ) *
Posiada. Traitsy działają trochę jak preprocesor, "doklejają" odpowiedni kod z zew. zasobu. W wyniku pracy obie klasy są de facto dokładnie takie same.


No i to można załatwić komponentowo. Nie podoba mnie się ten sposób.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.