metody statyczne czy instancyjnye, czy jedno ma jakąś przewagę nad drugim? |
metody statyczne czy instancyjnye, czy jedno ma jakąś przewagę nad drugim? |
13.01.2015, 13:36:54
Post
#1
|
|
Grupa: Zarejestrowani Postów: 80 Pomógł: 0 Dołączył: 31.01.2006 Ostrzeżenie: (0%) |
Witam,
tak się zastanawiam jaka jest wyższość klas/metod instancyjnych nad statycznymi. Czy ma ktoś dobry przykład że lepiej zastosować gdzieś klasę/metodę instancyjną niż statyczną? Bo chyba wszystko można zrobić statycznie... |
|
|
13.01.2015, 13:55:15
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) |
Wtedy taki kod jest kompletnie bez sensu, bo klasa staje się niczym innym jak synonimem dla przestrzeni nazw. Nie da się utworzyć dwóch obiektów o różnych wartościach.
Generalnie w OOP trzeba się dosyć mocno nagłowić by znaleźć uzasadniony przypadek dla użycia statycznych metod/właściwości. Ten post edytował Crozin 13.01.2015, 13:55:59 |
|
|
13.01.2015, 14:47:30
Post
#3
|
|
Grupa: Zarejestrowani Postów: 249 Pomógł: 0 Dołączył: 22.12.2011 Ostrzeżenie: (10%) |
Metoda statyczna
Metoda non-static:
Jak widać w tym teście metoda statyczna jest szybsza. Ja jestem zwolennikiem tej metody dlatego ją stosuje. -------------------- TERA TRYBI.pl
|
|
|
13.01.2015, 14:54:58
Post
#4
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
|
|
|
13.01.2015, 15:21:44
Post
#5
|
|
Grupa: Zarejestrowani Postów: 249 Pomógł: 0 Dołączył: 22.12.2011 Ostrzeżenie: (10%) |
Na tej stronie jak sam tytuł mówi autor pisał artykuł pod wpływem alkoholu. Twierdzi, że static powinien umrzeć - jedno stwierdzenie się nasuwa. Jeśli autor jest zawodowym znawca i profesjonalnym php'owcem niech przebuduje wszystkie frameworki, cms i tym podobne i niech pousuwa static. Skoro frameworki używają static to chyba nie w celu pogorszenia jakości skryptu.
-------------------- TERA TRYBI.pl
|
|
|
13.01.2015, 15:53:09
Post
#6
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
O jakich static'ach mówisz? O Fasadach w Laravelu? O innych ciekawych tworach które mają tylko ułatwiać życie aby nie tworzyć sztucznie dostępu do czegoś co już jest?
Podaj przykłady dlaczego Static jest lepsze od non-static. Kwestia wydajności jest tutaj średnim argumentem, bo static zajmuje pamięć, a non-static nie. Więc ihmo wychodzi na 0. |
|
|
13.01.2015, 15:55:55
Post
#7
|
|
Grupa: Zarejestrowani Postów: 249 Pomógł: 0 Dołączył: 22.12.2011 Ostrzeżenie: (10%) |
http://alembic-dev.com/php-static-vs-instance-benchmark/
Dziwne bo w testach static wykazuje mniejsze zużycie pamięci o około 1% Cytat Kwestia wydajności jest tutaj średnim argumentem, bo static zajmuje pamięć, a non-static nie Jak mam to rozumieć? Jeśli wprowadzę klasę z wartościami statycznymi wtedy zajmują one miejsce w RAM? A jeśli zastosuje non-static to wtedy wartości zostaja umieszczone w RAM i mają wielkość 0b? Dziwne bo według mnie każdy znak zajmuje miejsce w RAM. Ten post edytował MESSIAH :) 13.01.2015, 16:00:58 -------------------- TERA TRYBI.pl
|
|
|
13.01.2015, 16:07:08
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%) |
Jak widać w tym teście metoda statyczna jest szybsza. Ja jestem zwolennikiem tej metody dlatego ją stosuje. tzn szybsza w czym? Twój test u mnie wygląda tak: https://dl.dropboxusercontent.com/u/3624937...-non-static.png Nie bardzo widzę kolosalną różnicę między szybkością, nawet jeżeli non static wypada lepiej. To że ludzie jeżdżą pasatem, wcale nie znaczy że lamborghini aventador jest gorszym samochodem. Po prostu pasat jest tańszy. Podobnie jest IMO z static, dużo łatwiej wykorzystać singletona, niż jakoś sensownie rozplanować aplikacje która będzie wykorzystywać IoC/DI. A powiedz mi jeszcze, co jest łatwiej testować? |
|
|
13.01.2015, 16:59:08
Post
#9
|
|
Grupa: Zarejestrowani Postów: 249 Pomógł: 0 Dołączył: 22.12.2011 Ostrzeżenie: (10%) |
O jakich static'ach mówisz? O Fasadach w Laravelu? O innych ciekawych tworach które mają tylko ułatwiać życie aby nie tworzyć sztucznie dostępu do czegoś co już jest? Podaj przykłady dlaczego Static jest lepsze od non-static. Kwestia wydajności jest tutaj średnim argumentem, bo static zajmuje pamięć, a non-static nie. Więc ihmo wychodzi na 0. Kolega chyba źle wkleił kody które podałem lub ma stara wersję PHP. Przeprowadziłem jeszcze raz testy i zwiększyłem liczbe pętli oto wyniki: Static: 9000000 Total execution time is 5.2813019752502 Used memory: 130240 NoStatic: 9000000 Total execution time is 5.7793300151825 Used memory: 130528 Jak więc wydzimi static jest szybsze i nie pożera pamięci. Jesli już piszemy o samochodach to nie marka jest ważna a prędkość i pojemność. Kto by nie chciał samochodu 10 osobowego z ogromnym bagażnikiem, który osiąga 100km w 0,5s? Jeśli juz porównujesz ststic vs nostatic do marka vs marka wniosek nasuwa sie tylko jeden = kto używa nostatic woli markę a kto używa static woli prędkość i pojemność. Dziękuję, do widzenia. -------------------- TERA TRYBI.pl
|
|
|
13.01.2015, 20:57:19
Post
#10
|
|
Newsman Grupa: Moderatorzy Postów: 4 005 Pomógł: 548 Dołączył: 7.04.2008 Skąd: Trzebinia/Kraków |
Przepraszam z góry z kolokwializmy.
Pytanie jest w stylu "robić kupę" czy "sikać", nie da sie tego jednoznacznie określić poprostu zależy od potrzeby. @MESSIAH z całym szacunkiem ale Twoje testy nie dowodzą absolutnie nic. Wydaje mi sie że dalej jesteś w erze Athlona 1.7 i jak reprezentujesz rekord z bazy np. poprzez ActiveRecord pattern ja sobie nie umiem wyobrazić tego, no chyba że jak to w środowisku programistów PHP się przyjęło stosujesz AOP (array oriented programming), sorry ale może lepiej właśnie czasem pomyśleć o patternach i dobrych praktykach niż mierzyć wszystko co do nanosekundy bo później w światku IT programiści PHP postrzegani są jak "lewary". -------------------- |
|
|
13.01.2015, 21:06:57
Post
#11
|
|
Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%) |
Kolega chyba źle wkleił kody które podałem lub ma stara wersję PHP. Przeprowadziłem jeszcze raz testy i zwiększyłem liczbe pętli oto wyniki: Static: 9000000 Total execution time is 5.2813019752502 Used memory: 130240 NoStatic: 9000000 Total execution time is 5.7793300151825 Used memory: 130528 Jak więc wydzimi static jest szybsze i nie pożera pamięci. Jesli już piszemy o samochodach to nie marka jest ważna a prędkość i pojemność. Kto by nie chciał samochodu 10 osobowego z ogromnym bagażnikiem, który osiąga 100km w 0,5s? Jeśli juz porównujesz ststic vs nostatic do marka vs marka wniosek nasuwa sie tylko jeden = kto używa nostatic woli markę a kto używa static woli prędkość i pojemność. Dziękuję, do widzenia. Wkleić źle kod, tak żeby zużywał mniej pamięci? Ciekawe wnioski ;) Powiadasz że 288 bajtów jest wyciekiem pamięci, tak poważnym, aby utrudniać sobie testy jednostkowe? Jak wygląda u ciebie testowanie takich statycznych aplikacji, masz na to jakiś złoty środek, czy testów nie robisz wcale ? |
|
|
13.01.2015, 21:09:55
Post
#12
|
|
Newsman Grupa: Moderatorzy Postów: 4 005 Pomógł: 548 Dołączył: 7.04.2008 Skąd: Trzebinia/Kraków |
@by_ikar akurat testy statycznych metod są proste możesz pokryć cały kod. 288 to większe zużycie - nie wyciek
-------------------- |
|
|
15.01.2015, 15:57:30
Post
#13
|
|
Grupa: Zarejestrowani Postów: 251 Pomógł: 23 Dołączył: 23.04.2013 Ostrzeżenie: (0%) |
@by_ikar akurat testy statycznych metod są proste możesz pokryć cały kod. Normalnie mam ochotę wrzucić to na demotywatory (albo kwejka). Od kiedy to statyczne twory, które posiadają jeden stan i są dostępne GLOBALNIE są łatwe do testowania? Oj, kolego, chyba jeszcze nie słuchałeś opowieści starych rzemieślników mówiących na prawo i lewo, że ze "statyką" to trzeba ostrożnie postępować? Czyżbyś zapomniał o tym, że jeśli są dostępne globalnie, to z każdego miejsca możesz zmienić ich stan, a wtedy automatycznie zmienia się on we wszystkich miejscach aplikacji i może wywołać efekty uboczne we wszystkich tych miejscach? Ja się zgodzę, że jakiś mały helperek, typu hashPassword(), który zwraca hasha jest łatwy do testowania. Ale jeśli w metodzie statycznej znajdzie się choć troszkę logiki, albo jakieś zmienne, wtedy powiedzieć mogę jedynie: "Z Bogiem, chłopcze - może pomoże". ; ) Disclaimer: Metody statyczne mają swoje dobre strony, zdarza mi się ich używać. Nie ma to jak przedstawić używanie grzebienia na głowie łysego i powiedzieć, że grzebień jest złym narzędziem do czesania łysych... Takie coś zrobić może jedynie Geniusz! ; ) Ten post edytował Dejmien_85 15.01.2015, 16:55:30 |
|
|
16.01.2015, 09:17:43
Post
#14
|
|
Newsman Grupa: Moderatorzy Postów: 4 005 Pomógł: 548 Dołączył: 7.04.2008 Skąd: Trzebinia/Kraków |
Ja się zgodzę, że jakiś mały helperek, typu hashPassword(), który zwraca hasha jest łatwy do testowania. Ale jeśli w metodzie statycznej znajdzie się choć troszkę logiki, albo jakieś zmienne, wtedy powiedzieć mogę jedynie: "Z Bogiem, chłopcze - może pomoże". ; ) Zgadzam się w 100%, o właśnie takie testy mi chodziło, prosty metod bibliotecznych, fabryk. Testy jednostkowe dla takich rzeczy są proste. Nigdy nie stosowałem logiki w statycznych polach/metodach więc nawet nie pomyślałem o czymś takim. -------------------- |
|
|
7.02.2015, 12:44:57
Post
#15
|
|
Grupa: Zarejestrowani Postów: 627 Pomógł: 33 Dołączył: 1.05.2005 Skąd: Katowice Ostrzeżenie: (0%) |
Kontynuując temat zapalny (zawsze z tego jakieś hejty się rodzą ) jakim są metody statyczne: http://webmastah.pl/jak-programowac-obiekt...ach-ten-static/
-------------------- |
|
|
Wersja Lo-Fi | Aktualny czas: 18.04.2024 - 13:04 |