cojack
25.10.2011, 12:08:49
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
25.10.2011, 12:14:10
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
cojack
25.10.2011, 12:22:53
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
25.10.2011, 12:32:55
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
25.10.2011, 12:47:36
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
25.10.2011, 12:51:57
Wymienię parę elementów, które tylko skorzystają na traitsach.
EventDispatcher
Iterator
Collection
Mocki/Stuby
Dlaczego?
trait EventDispatcher {
// cos
}
class Module {
}
class SpecialModel extends Module {
use EventDispatcher; // bo np tylko w tym module jest mi potrzebny
}
Oczywiście php znów spieprzył sprawę ponieważ traitsy powinno móc dodawać przy tworzeniu instancji klasy
$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?
interface EventDispatcher_Interface {
// metody
}
class Module {
}
class SpecialModule extends Module implements EventDispatcher_Interface {
// i tutaj PRZEPISUJESZ (tak dokładnie) implementację metod event dispatchera
// ale po co? marnujesz pamięć a traitsy zrobią to za Ciebie znacznie wydajniej i szybciej!
}
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
ixpack
25.10.2011, 12:55:33
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
25.10.2011, 13:02:14
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
25.10.2011, 13:13:29
Nie dali wielodziedziczenia bo można byłoby burdel robić, to dają traitsy by robić jeszcze większy. Nie no dla mnie osom.
scanner
25.10.2011, 13:17:04
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
25.10.2011, 13:20:33
Cytat(scanner @ 25.10.2011, 14:17:04 )

Mogę Cię cytować?
Ale o co chodzi?
hwao
25.10.2011, 13:22:27
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
25.10.2011, 13:25:19
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
25.10.2011, 13:39:06
Cytuj cytuj
marcio
25.10.2011, 13:46:55
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
25.10.2011, 13:48:05
by_ikar
25.10.2011, 13:56:30
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
marcio
25.10.2011, 14:03:54
@normanos carpe diem
btw:
widze ze php idzie na dobra droge nawet type hinting wprowadzili nie jest zle
blooregard
25.10.2011, 14:23:45
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

Ale to też podobno ma być.
marcio
25.10.2011, 14:40:53
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
25.10.2011, 15:24:07
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
25.10.2011, 17: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ć.
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
25.10.2011, 17:37:59
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
25.10.2011, 17:49:08
@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
25.10.2011, 18:42:13
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
25.10.2011, 18:43:17
@lukasz_test: Traitsy to nie wielodziedziczenie - i całe szczęście.
marcio
25.10.2011, 19:35:19
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
25.10.2011, 19:44:15
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
25.10.2011, 20:22:06
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...
<?php
trait BbCodeParse
{
public function parse($object)
{
return '<code>'.$object.'</code>';
}
}
class Comments
{
//tutaj np wstrzykiwanie nazwy traits'u dynamicznie za pomoca jakies konfiracji czegokolwiek
use BBCodeParse { parse as protected; }
public function getComment()
{
//bla bla pobieramy i takie tam
return $this -> parse($string)
}
}
?>
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
25.10.2011, 20:27:47
@marcio: Dependency Injection - domyślam się, że wiesz co to jest. Mam jeszcze wymieniać dlaczego jest znacznie lepsze od tego co podałeś?
marcio
25.10.2011, 20:44:08
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
Crozin
25.10.2011, 22:15:25
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
25.10.2011, 22:40:09
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
25.10.2011, 23:05:13
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
26.10.2011, 08:28:41
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
26.10.2011, 09:36:25
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
26.10.2011, 10:17:40
@cojack: Zakładasz wątek w charakterze "OMFG Traitsy nadchodzą

! 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.
interface SomethingAwareInterface {
public function setSomething(Someting $something);
}
interface CommandInterface {
public function execute();
}
trait SomethingAwareTrait {
private $something;
public function setSomething(Someting $something) {
$this->something = $something;
}
}
class MyAbcClass implements SomethingAwareInterface, CommandInterface {
use SomethingAwareTrait;
public function execute() {
...
}
}
class MyDefClass implements SomethingAwareInterface, CommandInterface {
private $something;
public function setSomething(Someting $something) {
$this->something = $something;
}
public function execute() {
...
}
}
// ------------------
public function run(CommandInterface $command) {
if ($command instanceof SomethingAwareInterface) {
$command->setSomething($this->something);
}
$command->execute();
}
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
26.10.2011, 10:24:13
class MyAbcClass implements SomethingAwareInterface, CommandInterface {
use SomethingAwareTrait;
public function execute() {
...
}
}
to ścierwo zadziała? to mnie dobiłeś
marcio
26.10.2011, 10:24:58
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

ciekawe...
nospor
26.10.2011, 10:27:50
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
26.10.2011, 10:32:58
Cytat(marcio @ 26.10.2011, 11:24:58 )

btw:
@cojack ale jestes uparty...zawsze jestes przeciw wszystkim i wszystkiemu

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
26.10.2011, 10:35:48
@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
26.10.2011, 11:37:55
To że klasa MyDefClass nie posiada fizycznie metody setSomething a implementuje interfejs który wymusza jej posiadanie.
wookieb
26.10.2011, 11:51:12
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
26.10.2011, 11:55:47
DI enginowy?
wookieb
26.10.2011, 12:04:56
To nie ma kompletnie NIC wspólnego z DI.
cojack
26.10.2011, 12:06:32
A to ciekawe.
Crozin
26.10.2011, 12:28:28
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
26.10.2011, 12:31:36
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.