![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 898 Pomógł: 80 Dołączył: 31.05.2008 Ostrzeżenie: (20%) ![]() ![]() |
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... |
|
|
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 36 559 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
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 (IMG:style_emoticons/default/wink.gif) |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 898 Pomógł: 80 Dołączył: 31.05.2008 Ostrzeżenie: (20%) ![]() ![]() |
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.
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
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
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 1.11.2010 Ostrzeżenie: (0%) ![]() ![]() |
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.
|
|
|
![]()
Post
#6
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Wymienię parę elementów, które tylko skorzystają na traitsach.
EventDispatcher Iterator Collection Mocki/Stuby Dlaczego?
Oczywiście php znów spieprzył sprawę ponieważ traitsy powinno móc dodawać przy tworzeniu instancji klasy
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?
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 (IMG:style_emoticons/default/smile.gif) |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 248 Pomógł: 55 Dołączył: 1.06.2010 Skąd: mam to wiedzieć? Ostrzeżenie: (0%) ![]() ![]() |
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ć? Ten post edytował ixpack 25.10.2011, 12:57:12 |
|
|
![]()
Post
#8
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
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.
Powód edycji: [wookieb]:
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 898 Pomógł: 80 Dołączył: 31.05.2008 Ostrzeżenie: (20%) ![]() ![]() |
Nie dali wielodziedziczenia bo można byłoby burdel robić, to dają traitsy by robić jeszcze większy. Nie no dla mnie osom.
|
|
|
![]()
Post
#10
|
|
Grupa: Zarząd Postów: 3 503 Pomógł: 28 Dołączył: 17.10.2002 Skąd: Wrocław ![]() |
|
|
|
![]()
Post
#11
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
|
|
|
![]()
Post
#12
|
|
Developer Grupa: Moderatorzy Postów: 2 844 Pomógł: 20 Dołączył: 25.11.2003 Skąd: Olkusz ![]() |
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?
Powód edycji: [hwao]:
|
|
|
![]()
Post
#13
|
|
Grupa: Zarząd Postów: 3 503 Pomógł: 28 Dołączył: 17.10.2002 Skąd: Wrocław ![]() |
|
|
|
![]()
Post
#14
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Cytuj cytuj (IMG:style_emoticons/default/smile.gif)
|
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
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
|
|
|
![]()
Post
#16
|
|
Newsman Grupa: Moderatorzy Postów: 2 033 Pomógł: 290 Dołączył: 21.12.2007 Skąd: Łódź ![]() |
Cytuj cytuj (IMG:style_emoticons/default/smile.gif) Dodaj sobie do stopki: "@wookieb - cytowany przez najlepszych" (IMG:style_emoticons/default/biggrin.gif) (IMG:style_emoticons/default/biggrin.gif) (IMG:style_emoticons/default/biggrin.gif) |
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
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 (IMG:style_emoticons/default/wink.gif)
|
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 627 Pomógł: 33 Dołączył: 1.05.2005 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Boje się traitsów po phpcon... (IMG:style_emoticons/default/wink.gif) -> https://twitter.com/#!/supernrm/status/...483177193943041
|
|
|
![]()
Post
#19
|
|
Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
@normanos carpe diem
btw: widze ze php idzie na dobra droge nawet type hinting wprowadzili nie jest zle Ten post edytował marcio 25.10.2011, 14:05:26 |
|
|
![]()
Post
#20
|
|
Newsman Grupa: Moderatorzy Postów: 2 033 Pomógł: 290 Dołączył: 21.12.2007 Skąd: Łódź ![]() |
@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 (IMG:style_emoticons/default/wink.gif) Ale to też podobno ma być. |
|
|
![]()
Post
#21
|
|
Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
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/ Ten post edytował marcio 25.10.2011, 16:00:51 |
|
|
![]()
Post
#22
|
|
Grupa: Zarejestrowani Postów: 898 Pomógł: 80 Dołączył: 31.05.2008 Ostrzeżenie: (20%) ![]() ![]() |
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. Ten post edytował cojack 25.10.2011, 15:24:53 |
|
|
![]()
Post
#23
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
@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ę. Ten post edytował Crozin 25.10.2011, 17:24:49 |
|
|
![]()
Post
#24
|
|
Grupa: Zarejestrowani Postów: 651 Pomógł: 28 Dołączył: 4.12.2004 Ostrzeżenie: (0%) ![]() ![]() |
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.
|
|
|
![]()
Post
#25
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
@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.
|
|
|
![]()
Post
#26
|
|
Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 25.10.2011 Ostrzeżenie: (0%) ![]() ![]() |
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. |
|
|
![]()
Post
#27
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
@lukasz_test: Traitsy to nie wielodziedziczenie - i całe szczęście.
|
|
|
![]()
Post
#28
|
|
Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
@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... |
|
|
![]()
Post
#29
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
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. |
|
|
![]()
Post
#30
|
|
Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
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...
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. |
|
|
![]()
Post
#31
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
@marcio: Dependency Injection - domyślam się, że wiesz co to jest. Mam jeszcze wymieniać dlaczego jest znacznie lepsze od tego co podałeś?
|
|
|
![]()
Post
#32
|
|
Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
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 (IMG:style_emoticons/default/wink.gif) |
|
|
![]()
Post
#33
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
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. |
|
|
![]()
Post
#34
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
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 |
|
|
![]()
Post
#35
|
|
Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
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? |
|
|
![]()
Post
#36
|
|
Grupa: Zarejestrowani Postów: 898 Pomógł: 80 Dołączył: 31.05.2008 Ostrzeżenie: (20%) ![]() ![]() |
@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... |
|
|
![]()
Post
#37
|
|
Grupa: Moderatorzy Postów: 4 465 Pomógł: 137 Dołączył: 26.03.2004 Skąd: Gorzów Wlkp. ![]() |
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. |
|
|
![]()
Post
#38
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
@cojack: Zakładasz wątek w charakterze "OMFG Traitsy nadchodzą(IMG:style_emoticons/default/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.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. |
|
|
![]()
Post
#39
|
|
Grupa: Zarejestrowani Postów: 898 Pomógł: 80 Dołączył: 31.05.2008 Ostrzeżenie: (20%) ![]() ![]() |
to ścierwo zadziała? to mnie dobiłeś (IMG:style_emoticons/default/sleep.gif) Ten post edytował cojack 26.10.2011, 10:24:33 |
|
|
![]()
Post
#40
|
|
Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
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 (IMG:style_emoticons/default/wink.gif) ciekawe... Ten post edytował marcio 26.10.2011, 10:26:29 |
|
|
![]()
Post
#41
|
|
Grupa: Moderatorzy Postów: 36 559 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
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. |
|
|
![]()
Post
#42
|
|
Grupa: Zarejestrowani Postów: 898 Pomógł: 80 Dołączył: 31.05.2008 Ostrzeżenie: (20%) ![]() ![]() |
btw: @cojack ale jestes uparty...zawsze jestes przeciw wszystkim i wszystkiemu (IMG:style_emoticons/default/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. |
|
|
![]()
Post
#43
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
@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.
Ten post edytował Crozin 26.10.2011, 10:36:41 |
|
|
![]()
Post
#44
|
|
Grupa: Zarejestrowani Postów: 898 Pomógł: 80 Dołączył: 31.05.2008 Ostrzeżenie: (20%) ![]() ![]() |
To że klasa MyDefClass nie posiada fizycznie metody setSomething a implementuje interfejs który wymusza jej posiadanie.
|
|
|
![]()
Post
#45
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
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. |
|
|
![]()
Post
#46
|
|
Grupa: Zarejestrowani Postów: 898 Pomógł: 80 Dołączył: 31.05.2008 Ostrzeżenie: (20%) ![]() ![]() |
DI enginowy?
|
|
|
![]()
Post
#47
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
To nie ma kompletnie NIC wspólnego z DI.
|
|
|
![]()
Post
#48
|
|
Grupa: Zarejestrowani Postów: 898 Pomógł: 80 Dołączył: 31.05.2008 Ostrzeżenie: (20%) ![]() ![]() |
A to ciekawe.
|
|
|
![]()
Post
#49
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
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?
|
|
|
![]()
Post
#50
|
|
Grupa: Zarejestrowani Postów: 898 Pomógł: 80 Dołączył: 31.05.2008 Ostrzeżenie: (20%) ![]() ![]() |
|
|
|
![]()
Post
#51
|
|
Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
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. Co jest w nim złego? No wlasnie te traitsy dodaja metody w czasie interpretacji kodu? Tez chcialbym wiedziec co jest nie tak w tym przykladzie...!?! Cytat To że klasa MyDefClass nie posiada fizycznie metody setSomething a implementuje interfejs który wymusza jej posiadanie. I to wedlug ciebie jest chore?I psuje kompozycje?Zamiast implementowac ta metode potem w klasie dolaczasz traits-a ktory owa metoda juz posiada...ulatwienie jesli zrobione z glowa! Cytat Nie podoba mnie się ten sposób. A co tu jest do podobania sie?Kodzenie to nie widzimisie nie podoba sie to nie uzywasz nie wiem jak uzywac nie uzywasz..dla mnie tez pewne mechanizmy np z python sa dziwne i ich nie uzywam bo poprostu nie widze takiej potrzeby! Ten post edytował marcio 26.10.2011, 12:35:06 |
|
|
![]()
Post
#52
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Niepotrzebny jest interfejs dla metody, która implementuje traits. Jest to kompletnie nadmiarowe.
|
|
|
![]()
Post
#53
|
|
Grupa: Zarejestrowani Postów: 49 Pomógł: 8 Dołączył: 5.12.2008 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#54
|
|
Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
@wookieb hmm czyli traits sam w sobie dziala jak interfejs dodajac go do klasy wiadomo ze ta bedzie implementowala metoda ktora potrzebujemy dobrze rozumiem?
|
|
|
![]()
Post
#55
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Jeżeli ktoś znajdzie przykład sensownego zastosowanie interfejsu + traitsów to chętnie zobaczę (IMG:style_emoticons/default/smile.gif) |
|
|
![]()
Post
#56
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
@wookieb: Nic nie jest tam nadmiarowe. Jak chcę mieć pewność, że obiekt implementuje interfejs to to jasno określam. A to czy implementacja tego interfejsu jest zrealizowana przy pomocy traitsa, jest odziedziczona czy "normalnie" napisana obchodzi mnie tyle co sytuacja dzieci w Afryce - w ogóle.
Cytat No i to można załatwić komponentowo. Nie podoba mnie się ten sposób. Częściowo tak - sam bym poszedł w tę stronę - ale nie do końca. Traitsy w przeciwieństwie do kompozycji umożliwiają Ci transparentne wydzielenie części implementacji. Kompozycja zaś wpływa na interfejs obiektów. Kiedy to się może przydać - sam nie wiem, nie jestem raczej zwolennikiem traitsów, bo w realnym świecie nie za bardzo jest je gdzie zastosować.
|
|
|
![]()
Post
#57
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
@wookieb: Nic nie jest tam nadmiarowe. Jak chcę mieć pewność, że obiekt implementuje interfejs to to jasno określam. A to czy implementacja tego interfejsu jest zrealizowana przy pomocy traitsa, jest odziedziczona czy "normalnie" napisana obchodzi mnie tyle co sytuacja dzieci w Afryce - w ogóle. Zależy od kontekstu i przeznaczenia. Osobiście nie pchałbym traitsów w takie miejsce. |
|
|
![]()
Post
#58
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Właśnie teraz wpadło mi do głowy, że traitsy przede wszystkim mogłyby się przydać właśnie jako takie "code snippety" na kształt tego co pokazałem w przykładzie. Coś w stylu "hej, tutaj masz gotową podstawową implemetnację interfejsu". Miałoby to kilka zalet nad abstrakcyjną klasą robiącą za domyślną implementację.
Swoją drogą sprawdzanie czy obiekt korzysta z traitsa (instanceof) raczej nie ma racji bytu ze względu na fakt, że takim traitesem można manipulować (zmieniać widoczność metod czy ich nazwy). Chyba, że instanceof działałoby wyłącznie z nietkniętym traitsem. |
|
|
![]()
Post
#59
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Nie możesz dynamicznie zmienić widoczności metod traitsa ani jego nazw. Takie coś tylko przez ReflectionAPI, które nikt w innych celach niż diagnostyczne/testów nie używa.
A sprawdzanie typu, który jest traitsem ma rację bytu. Przykład w 1 moim poście w tym temacie. |
|
|
![]()
Post
#60
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
@wookieb: http://php.net/manual/en/language.oop5.traits.php przykłady #5 i #6. Swoją drogą ReflectionAPI używa się poza celami testów - szczególnie, gdy trzeba zadecydować co odpalić na podstawie jakiś danych dostępnych tylko w czasie wykonywania.
|
|
|
![]()
Post
#61
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Nie zauważyłęm. Przepraszam (IMG:style_emoticons/default/sad.gif)
Kajam się (IMG:style_emoticons/default/sad.gif) |
|
|
![]()
Post
#62
|
|
Grupa: Zarejestrowani Postów: 247 Pomógł: 11 Dołączył: 5.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
Czyli jak mam:
to będę mógł zapisać tak:
(IMG:style_emoticons/default/questionmark.gif) Ponadto w traitsach mogę deklarować zmienne np.:
(IMG:style_emoticons/default/questionmark.gif) A do tego metoda zaimplementowana w traitsie może być przesłonięta przez metodę w klasie wykorzystującej traitsa? Przeglądnąłem kody paru blogów (przyznam, że patrzyłem tylko na kod, bo nie chciało mi się czytać, a poza tym nie mam php 5.4 żeby sprawdzić): http://cogo.wordpress.com/2011/07/01/playi...-php-5-4alpha1/ http://davedevelopment.co.uk/2011/08/06/tr...ging-trait.html i widzę, że traits może mieć nawet konstruktor:
Jakoś mi to przypomina klasę i wielodziedziczenie.... Ten post edytował wiewiorek 26.10.2011, 18:55:32 |
|
|
![]()
Post
#63
|
|
Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
Z tego co sie orientuje to traitsy nie maja konstruktorow i nie mozna utworzyc ich istancji...przynajmniej tak jest w Scali chyba ze w php jest inaczej lub mozna to oszukac za pomoca operator AS -> https://bugs.php.net/bug.php?id=55554
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 1.10.2025 - 12:37 |