Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zasady pisania na forum Pro

Tematy na forum Pro mogą zakładać jedynie moderatorzy. W otwartych tematach może pisać każdy, kto ma coś fachowego do powiedzenia. Wszystkie posty nie wnoszące nic do tematu będą natychmiast usuwane, a ich autorzy dostaną ostrzeżenie.
Jeśli uważasz, że jakiś temat jest warty dyskusji na tym forum, zgłoś go w temacie Propozycje.

> Wzorce projektowe, coto, poco, dlaczego
nospor
post 17.04.2007, 10:42:25
Post #1





Grupa: Moderatorzy
Postów: 36 455
Pomógł: 6292
Dołączył: 27.12.2004




Przez te święta człowiek rachube stracił i zapomniał o PRO.

No to może coś o wzorcach projektowych? Co to jest, na co to komu, jakie korzyści przyniesie stosowanie, jakie mamy wzorce (opis).


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
pinochet
post 11.01.2009, 01:06:04
Post #2





Grupa: Zarejestrowani
Postów: 120
Pomógł: 12
Dołączył: 9.10.2008
Skąd: Tricity.Rumia()

Ostrzeżenie: (0%)
-----


Witam chciałbym się przyłączyć do dyskusji.
Otóż tak jak Kocurro uważam iż implementacją singletonu jest klasa statyczna ... kto powiedział że ona nie ma instancji? to jest rzecz czysto abstrakcyjna - możemy założyć że ma jedną niepowtarzalną instancję do której programista nie ma poprostu dostępu, każdy dowód na to ( a przynajmniej nie przychodzi mi nic do głowy teraz) że klasa statyczna nie jest singletonem mozna skierowac przecikwo "singletonowi z jawną instancją". Gdzieś kiedyś czytałem że singleton to poprostu obejście braku klas abstrakcyjnych w php 4.
Jeżeli kody takie jak ten zaprezentowany przez orglee #28 mają dowodzić potrzeby zastosowania Singletonu to nie mamy o czym rozmawiać. Przypisanie instancji do zmiennej statycznej i odwoływanie się do tychże singletonów przez klasę główną nie ma żadnego sensu(w sensie singletonowym ;] ). Zaryzykuję stwierdzenie, że aplikacja ta nie wykorzystuje wogóle wzorca singleton aczkolwiek może go implementować.(wniosek ... )
A do eliminacji pomyłek to polecam coś takiego:
  1. <?php
  2. class Niby_ze_potrzebuje_singletonu{
  3.    private static $flaga = 0;
  4.    function __construct(){
  5.      if(self::$flaga) throw new Exception("mea culpa, mea maxima culpa, najpierw projekt potem implementacja.");
  6.      self::$flaga = 1;
  7.    }
  8. }
  9. ?>
Go to the top of the page
+Quote Post
qba_rox
post 12.01.2009, 01:20:52
Post #3





Grupa: Zarejestrowani
Postów: 29
Pomógł: 1
Dołączył: 12.01.2009
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Cytat(pinochet @ 11.01.2009, 00:06:04 ) *
Otóż tak jak Kocurro uważam iż implementacją singletonu jest klasa statyczna ... kto powiedział że ona nie ma instancji? to jest rzecz czysto abstrakcyjna - możemy założyć że ma jedną niepowtarzalną instancję do której programista nie ma poprostu dostępu, każdy dowód na to ( a przynajmniej nie przychodzi mi nic do głowy teraz) że klasa statyczna nie jest singletonem mozna skierowac przecikwo "singletonowi z jawną instancją".


No to sie mylisz brachu i powiem Ci dlaczego.

Klasa jest tylko pewna struktura, opisem zachowywania sie obiektow i zadna (nawet najmniejsza ;p) jej instancja nie jest alokowana w pamieci. Gdyby mozna bylo dodac dyrektywe static przed nazwa klasy, to wtedy prawdopodobnie mozna byloby tak powiedziec. Idac dalej, pola statyczne w klasie sa inicjalizowane w pamieci, dlatego mozesz na nich operowac. A klasa wtedy jest tylko takim interfejsem dostepu do tych danych. Poza tym, wg definicji, tworzac obiekt, tworzysz instancje, w zadnym innym wypadku. W pamieci jest tylko przechowywana jej struktura, bys ty sam ta instancje mogl powolac.

A skoro instancje, programista moze powolac tylko tworzac nowy obiekt, singleton znaczy nie inaczej niz, pozwolenie na stworzenie tylko jednego obiektu. Poza tym dzieki temu ze jest to obiekt, mozesz go np serializowac i zapisac w cachu, klasy (tej niby statycznej) nie zserializujesz. Nic z nia nie zrobisz. mozesz tylko (powtorze sie) przez nia uzyskac dostep do blokow pamieci (pola statyczne).

Dlaczego singleton nie jest antywzorcem? Przykladem jest sesja. moze byc tylko jedna. Nie mozemy wiec pozwolic na tworzenie wiecej niz jednego obiektu sesji, bo to mogloby miec fatalne skutki, np zniszczeniem danych sesyjnych. No i oglnie rzecz biorac, Sesja jest jedna, wiec jak moze byc reprezentowana przez kilka obiektow?

Pozdrawiam

Ten post edytował qba_rox 12.01.2009, 01:30:47


--------------------
Kodzimy!!!
Go to the top of the page
+Quote Post
nasty
post 23.04.2009, 03:04:47
Post #4





Grupa: Zarejestrowani
Postów: 634
Pomógł: 14
Dołączył: 27.05.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


Cytat(qba_rox @ 12.01.2009, 02:20:52 ) *
Dlaczego singleton nie jest antywzorcem? Przykladem jest sesja. moze byc tylko jedna. Nie mozemy wiec pozwolic na tworzenie wiecej niz jednego obiektu sesji, bo to mogloby miec fatalne skutki, np zniszczeniem danych sesyjnych. No i oglnie rzecz biorac, Sesja jest jedna, wiec jak moze byc reprezentowana przez kilka obiektow?
Pozwolę sobie nie zgodzić się i wyprowadzić Cie z błędu przy okazji winksmiley.jpg

Załóżmy, że klasa Session jest klasą która opisuję sesję. Tworzona jest tylko raz, na początku działania frameworku, następnie przekazywana do Request, następnie, Controller i potem do Response.

Jak widać masz jedną klasę, która ma swoje określone workflow, wiadomo w jakiej kolejności co i jak ma do niej dostęp - w taki sposób, że możesz narysować diagram "podań" ten klasy. Czy taki model nie jest dużo czytelniejszy niż singleton?

I teraz rozważmy możliwość tworzenia nowych instancji Sessji, gdzie wiemy, że sesja jest tylko jedna.

Jak to bywa z obiekatmi kontekstowymi, są one przekazywane w parametrach metod do kolejnych klas, i nawet jak utworzysz nowy obiekt klasy Session, to on i tak będzie pusty a spopulowany danymi obiekt będzie tylko ten który był w parametrze - więc jaki problem? imho, żaden.

Za używanie Singletonów powinni bić po mordzie i tyle tongue.gif
Go to the top of the page
+Quote Post

Posty w temacie
- nospor   Wzorce projektowe   17.04.2007, 10:42:25
- - splatch   Może troszkę pokrótce moje subiektywne z...   21.04.2007, 21:22:57
|- - Sedziwoj   Cytat(splatch @ 21.04.2007, 22:22:57 ...   21.04.2007, 21:30:04
- - splatch   Doszło do nadinterpretacji. Wzorce to bardzo ...   21.04.2007, 22:00:54
- - Sedziwoj   Wiesz wszędzie gdzie nie stosujesz wzorca tam spra...   21.04.2007, 22:16:24
- - Ociu   Rzut linkami: Grupowe:http://www.phppatterns.com/d...   22.04.2007, 08:02:19
- - splatch   Pragnę nadminić, że niektórzy z biegiem czasu zacz...   22.04.2007, 08:18:06
|- - Ociu   Cytat(splatch @ 22.04.2007, 09:18:06 ...   22.04.2007, 18:35:02
- - KOMPsognat   Chciałbym jeszcze poruszyć temat podziału wzorców....   26.06.2007, 19:07:57
- - splatch   Świetny spis, którego próżno szukać po "książ...   4.07.2007, 14:47:33
- - KOMPsognat   splatch: przyznam szczerze, że spis mi jest p...   29.07.2007, 13:05:44
- - Jim   kopalnia: http://sourcemaking.com/ Cytat(KOMPsogn...   14.02.2008, 12:05:12
- - KOMPsognat   Projekt umarł śmiercią naturalną - brak chętnych d...   24.02.2008, 11:57:38
- - markac   To ja tak może z innej beczki. Wszyscy tu chyba są...   8.11.2008, 23:25:05
- - ayeo   @markac, masz sporo racji. Jednak rozgraniczyłbym ...   9.11.2008, 12:59:04
- - qbatoja   osobiscie uwazam nieodpowiednim nazywanie singleto...   20.11.2008, 00:27:45
- - tomek_swat   proszę o wyjaśnienie pewnej kwestii spoktałem się ...   3.12.2008, 23:44:48
|- - markac   Cytat(tomek_swat @ 3.12.2008, 23:44:4...   4.12.2008, 09:15:17
- - tomek_swat   ok dzięki, czyli rozumiem, że mogę spokojnie stoso...   4.12.2008, 16:01:58
- - Kocurro   W PHP singleton łatwo się uzyskuje tworząc klasę s...   5.12.2008, 15:13:39
- - Cysiaczek   @Kocurro - nie żebym się czepiał, ale Singleton to...   5.12.2008, 23:41:46
- - Kocurro   Cysiaczek - singleton to wzorzec projektowy ... pr...   5.12.2008, 23:45:32
- - Cysiaczek   Klasa statyczna nie jest implementacją Singletona ...   6.12.2008, 03:11:12
- - chlebik   Cysiaczek dobrze mowi. Dla informacji - ostatnie s...   10.12.2008, 10:29:28
- - nasty   Osobiście, bardzo nie lubie wzorca Singleton ...   27.12.2008, 07:25:34
- - qbatoja   w domu mam jeden piec do ogrzewania. zeby uzyskac ...   5.01.2009, 18:44:12
- - nasty   ... albo przekaze gaz z jednego   6.01.2009, 16:47:18
- - orglee   [PHP] pobierz, plaintext <?phpclass DRA_Engine ...   7.01.2009, 23:03:16
- - markac   Wszystko   7.01.2009, 23:12:57
- - orglee   To żeś mnie nawrócił na Context Miałem jakoś tut...   7.01.2009, 23:46:54
- - wrzasq   W twoim przypadku singletony są bez sensu i na pew...   8.01.2009, 02:54:52
- - orglee   Rejestr dla wygody, natomiast Singleton jako uniem...   8.01.2009, 05:18:20
- - LBO   Prawda jest taka, że przy kontekście w ogóle nie p...   8.01.2009, 09:01:43
- - orglee   Jak mniemam w komentarzu metody po @return jest po...   8.01.2009, 11:17:28
- - LBO   1. Tak sadzę, że wynajdujesz koło na nowo 2. Po ...   8.01.2009, 11:47:07
- - nasty   CytatDruga sprawa to sprawdzanie implementowanych ...   9.01.2009, 23:34:17
- - pinochet   Witam chciałbym się przyłączyć do dyskusji. Otóż t...   11.01.2009, 01:06:04
|- - qba_rox   Cytat(pinochet @ 11.01.2009, 00:06:04...   12.01.2009, 01:20:52
|- - nasty   Cytat(qba_rox @ 12.01.2009, 02:20:52 ...   23.04.2009, 03:04:47
- - orglee   Jak najbardziej masz racje nasty. Zapomniałem tylk...   11.01.2009, 14:08:38
- - Cysiaczek   CytatGdzieś kiedyś czytałem że singleton to popros...   11.01.2009, 21:14:04
- - pinochet   Jeśli chodzi o serializację - można to oczywiście ...   12.01.2009, 22:20:25
- - wrzasq   Cytatdalej twierdzę, że stosowanie wyżej wymienion...   13.01.2009, 05:57:57
- - LBO   Dorzucę swoje 0,02zl Singleton nie jest z...   19.04.2009, 10:14:00
- - qba_rox   @nasty Pozwole sobie odpisac Smiem poddac w watp...   1.05.2009, 13:59:11
|- - nasty   Drogi @qba_rox, zauważ jednak, że takie uniemożliw...   1.05.2009, 20:34:53
|- - qba_rox   Cytat(nasty @ 1.05.2009, 20:34:53 ) D...   2.05.2009, 10:15:35
- - Cysiaczek   @nasty - a co jeśli obiekt, który tworzymy, d...   10.05.2009, 00:12:16
- - nasty   @Cysiaczek, robi to samo, tyle, że na początku swo...   13.05.2009, 07:58:52
- - Cysiaczek   To jest ilustracja do pytania, które zadaję Tobie ...   13.05.2009, 08:45:26
- - LBO   Cytat(nasty @ 1.05.2009, 21:34:53 ) ....   13.05.2009, 09:05:04
- - pejott   Cały problem w tym, że zaczęto implementować wzorz...   13.05.2009, 11:00:11
- - nospor   CytatJa odciąłem się od singletona w moich projekt...   13.05.2009, 11:37:11
- - LBO   Cytat(pejott @ 13.05.2009, 12:00:11 )...   13.05.2009, 11:45:28
- - pejott   No tak, to było tylko ogólne spostrzeżen...   13.05.2009, 11:55:37
- - LBO   Przygotowałem malutki przykładzik. Mam nadzieję, ż...   13.05.2009, 12:37:26
- - pejott   Dzięki, właśnie tak to sobie wyobrażałem i prawie ...   13.05.2009, 15:11:45
- - cojack   Taki mi to singleton ze hoho, po prostu zwykly cho...   20.05.2009, 09:30:34
- - nospor   CytatA jak mi ktoś napisze że interfejsy...   20.05.2009, 10:43:03
- - LBO   Cytat(cojack @ 20.05.2009, 10:30:34 )...   20.05.2009, 12:02:52
- - nasty   Bądź co bądź, to cojak ma racj...   20.05.2009, 13:46:42
- - cojack   nospor niektórzy jednak tak uwarzają, podspodem li...   20.05.2009, 15:55:17
- - Kocurro   Widać, że niektórzy nie wiedzą po co jest dziedzic...   20.05.2009, 15:58:06
- - Crozin   W Javie interfacey również nie służą wielodziedzic...   20.05.2009, 16:57:26
- - LBO   Cytat(nasty @ 20.05.2009, 14:46:42 ) ...   21.05.2009, 23:08:47
- - nieraczek   Dzięki temu forum dowiedziałem się ...   22.05.2009, 14:29:14
- - LBO   Takie obiekty o jakich piszesz się przekazuje (dal...   22.05.2009, 16:05:51
|- - murwazy   Cytat(LBO @ 22.05.2009, 17:05:51 ) Ta...   2.06.2009, 08:08:02
- - Crozin   Singleton służy zapewnieniu, że w całej apliacji b...   2.06.2009, 12:23:38
- - LBO   Cytat(murwazy @ 2.06.2009, 09:08:02 )...   2.06.2009, 15:05:20
|- - murwazy   Cytat(LBO @ 2.06.2009, 16:05:20 ) Czy...   5.06.2009, 22:43:03
- - marcio   Cytat(murwazy @ 5.06.2009, 23:43:03 )...   5.06.2009, 22:50:00
- - nieraczek   A jaka są właściwie zalety/wady u...   7.06.2009, 11:37:14
- - Crozin   Przewagi 2 na 1: 1) Możesz mieć wiele otwartych po...   7.06.2009, 11:39:53
- - marcio   Cytat1) Możesz mieć wiele otwartych połączeń z baz...   7.06.2009, 11:59:06
- - skowron-line   to ja może bez zbędnego pi****** dam link http://c...   7.06.2009, 12:15:29
- - marcio   Cytat(skowron-line @ 7.06.2009, 13:1...   7.06.2009, 12:26:13
- - Kamil Pietrzak   no to pojechali... ...ale chyba dobry temat znalaz...   5.02.2010, 16:40:14
- - XianN   joomle to poczytaj jak nie pisac. A na symfony sie...   5.02.2010, 19:18:34
- - Kamil Pietrzak   zaraz sciagne i zobacze, na pewno nie zaszkodzi, m...   5.02.2010, 20:27:25
- - lukasz.adamczewski   zobacz sobie sympala to tzw. content management fr...   23.02.2010, 23:21:47


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.04.2024 - 01:00