<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>adamczuk.net.pl &#187; oop</title>
	<atom:link href="http://adamczuk.net.pl/tag/oop/feed/" rel="self" type="application/rss+xml" />
	<link>http://adamczuk.net.pl</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Fri, 03 Feb 2012 21:59:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Nie przepisuj aplikacji</title>
		<link>http://adamczuk.net.pl/2010/11/14/nie-przepisuj-aplikacji/</link>
		<comments>http://adamczuk.net.pl/2010/11/14/nie-przepisuj-aplikacji/#comments</comments>
		<pubDate>Sun, 14 Nov 2010 16:35:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Przemyślenia]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[apps]]></category>
		<category><![CDATA[niew]]></category>
		<category><![CDATA[oop]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[project]]></category>
		<category><![CDATA[refactoring]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://adamczuk.net.pl/?p=415</guid>
		<description><![CDATA[Osobiste przemyślenia na temat tworzenia i przepisywania aplikacji.]]></description>
			<content:encoded><![CDATA[<p>Podstawowa wada programistów to błędne przeświadczenie, że szybko i lepiej napiszą nową wersję działającej aplikacji. Jak mylne może być takie rozumowanie przeczytamy chociażby w <a href="http://www.devblogi.pl/2010/07/rzeczy-ktorych-nigdy-nie-powinienes.html">tłumaczeniu</a> zagranicznego artykułu, który napisał <a href="http://joelonsoftware.com/AboutMe.html">Joel Spolsky</a>. Dalsza część wpisu to moje własne przemyślenia na temat tworzenia oprogramowania.<br />
<span id="more-415"></span><br />
Z własnego doświadczenia wiem jak silna dla programisty jest motywacja do rozpoczęcia nowego projektu. Nowe plany stworzenia czegoś oryginalnego, lepszego, innowacyjnego, wydajniejszego, ładniejszego. Jak zwodnicze potrafi być nasze myślenie kiedy po krótkim czasie płomienny zapał wygasa, a miejsce podniecenia zajmuje stopniowe rozczarowanie i przygnębienie. Programista sądzi, że napisze dany kod w określonym czasie. Szybko przekonamy się, że tak nie będzie po czasie jaki przydziela kierownik projektu. Dlatego, praktycznie zawsze przepisanie aplikacji od zera kończy się porażką. Przewidywany czas pracy programisty mnożymy dwukrotnie, a ten czas kierownik projektu ponownie podwaja. Dopiero taki okres bywa rzeczywistym czasem tworzenia danego projektu. Twierdzę tak na podstawie własnych doświadczeń, choć w różnych firmach bywają inne przeliczniki. Oczywiście nie ma tutaj żadnych wyników ankiet, ani badań, ale każdy w głębie serca, może sam zadać sobie pytanie.</p>
<p><quote>Czy warto przepisać dany produkt od zera?</quote></p>
<p>Pytanie to jest bardzo skomplikowane, bo istnieje wiele powodów, które skłaniają programistów do próby przepisania oprogramowania. Jednak zmieniony interfejs użytkownika, funkcjonalności aplikacji czy poprawa wydajności nie zawsze są warte przepisywania oprogramowania. Czas i zasoby poświęcone na tworzenie nowej wersji, zwykle przerastają wstępnie zaplanowane, co jeszcze bardziej pogłębia frustrację zespołu. A odpowiedź jest bardzo prosta &#8211; jaki jest sens w przepisywaniu czegoś co działa. Może nie wygląda pięknie od strony wizualnej, może wewnątrz kodu kryją się absurdalne rozwiązania programistyczne, ale przecież to działa. Wielu ludzi poświęciło swój czas, testowało, pisało poprawki, aby to oprogramowanie działało, a próba przepisania wszystkiego od nowa to najprawdopodobniej, przekreślenie ich trudu i wpędzenie siebie w wielkie bagno. Ponownie napotkamy problemy, które rozwiązywali nasi poprzednicy.</p>
<p>Zupełnie podobnie wygląda sytuacja, w której rozpoczynamy prace nad istniejącym projektem. Nie możemy wyzerować konta, poprzez nowe plany, rozwiązania i koncepcje. Musimy wspierać przestarzały, nieaktualny kod, dźwigać na plecach ciężar poprzednich wersji oprogramowania, kompatybilności oraz błędów swoich poprzedników. Tutaj również pojawia się przytoczone wyżej pytanie.</p>
<p><quote>Czy warto przepisać dany produkt od zera?</quote></p>
<p>W wielu przypadkach to indywidualna decyzja, ale przeważnie odpowiedz jest jedna &#8211; nie warto. Może efekt będzie zadowalający, oprogramowanie wydajniejsze, a kod klarowny. Jednak czas i zasoby wykorzystane przy danym projekcie, można przenieść na zupełnie nowy, niezależny produkt.</p>
]]></content:encoded>
			<wfw:commentRss>http://adamczuk.net.pl/2010/11/14/nie-przepisuj-aplikacji/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wzorzec projektowy Singleton</title>
		<link>http://adamczuk.net.pl/2010/01/30/wzorzec-projektowy-singleton/</link>
		<comments>http://adamczuk.net.pl/2010/01/30/wzorzec-projektowy-singleton/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 23:21:05 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Wzorce projektowe]]></category>
		<category><![CDATA[design patern]]></category>
		<category><![CDATA[oop]]></category>
		<category><![CDATA[singleton]]></category>

		<guid isPermaLink="false">http://adamczuk.net.pl/?p=250</guid>
		<description><![CDATA[Wzorzec projektowy Singleton. Wyjaśnienie idei oraz implemntacja w PHP.]]></description>
			<content:encoded><![CDATA[<p>Wzorce projektowe to ogólne rozwiązania częstych informatycznych problemów. Programowanie obiektowe w PHP5 różni się nie tylko składnią, ale również pewnymi brakami w porównaniu z innymi językami, typu C++ czy Java. Pomimo tego wzorce projektowe idealnie sprawdzają się w aplikacjach internetowych.<span id="more-250"></span></p>
<p>Częsta sytuacja, z jaką spotykają się programiści to współdzielenie zasobów. Wszystkie zapytania do bazy danych wymagają połączenia. Taki uchwyt może być wykorzystany wielokrotnie przez różne zapytania przy tym samym żądaniu. Otwieranie i zamykanie połączeń jest najzwyczajniej, mało ekonomiczne.</p>
<h3>Singleton</h3>
<p>Istnieje proste rozwiązanie tego problemu. Singleton to wzorzec projektowy, który zwraca istniejącą instancję obiektu. Jeśli taka instancja nie istnieje wówczas jest tworzona. Idea rozwiązania jest bardzo prosta i idealnie pasuje do naszego problemu. Poniżej znajduje się kod klasy <code>DB</code>, która dziedziczy z klasy <code>Singleton</code> i tworzy takie połączenie do bazy.</p>
<p>Prawidłowa struktura klas, co zasugerował <a href="http://adamczuk.net.pl/2010/01/30/wzorzec-projektowy-singleton/comment-page-1/#comment-5526">Wasacz</a> w komentarzach, wymaga dziedziczenia klasy <code>DB</code> po ogólnej klasie wzorca <code>Singleton</code>. Niestety nie mam pomysłu zogranizowanie klasy wzorca poza pustymi metodami i jedną zmienną.</p>
<pre><code>&lt;?php
abstract class Singleton {
	protected static $_instance;

	protected function __construct() { }

	public static function instance() { }
}

class DB extends Singleton {
	private $_conn;

	private function __construct($conf) {
		$this->_conn = mysql_connect($conf['host'], $conf['user'], $conf['pass']) or die($this->error());
	}

	public static function instance($conf=null) {
		if (is_null(self::$_instance)) {
			self::$_instance = new DB($conf);
		}
		return self::$_instance;
	}
}
?&gt;</code></pre>
<p>Klasa <code>DB</code> zaprezentowana powyżej nie jest skomplikowana. Zawiera jednak tylko niezbędne metody, prezentujące działanie klasy. Niemożliwe jest stworzenie egzemplarza klasy <code>DB</code>, ponieważ konstruktor jest prywatny. Dostęp do obiektu możliwy jest poprzez publiczną, statyczną metodę <code>instance()</code>.</p>
<h3>Podsumowanie</h3>
<p>Istnieje prosta metoda sprawdzenia czy klasa działa poprawnie. Próba pobrania obiektu klasy <code>DB</code> powinna zwrócić ten sam zasób.</p>
<pre><code>&lt;?php
print_r(DB::instance());
print_r(DB::instance());
?&gt;</code></pre>
<p>Poniższy wydruk pokazuje, że dokładnie tak się dzieje.</p>
<pre><code>DB Object
(
    [_conn:private] => Resource id #11
)
DB Object
(
    [_conn:private] => Resource id #11
)</code></pre>
<p>Wzorzec projektowy Singleton stosuje się bez względu na stopień skomplikowania aplikacji. Rozwiązanie to jest wygodniejsze i elastyczniejsze niż przechowywanie uchwytu do bazy danych w zmiennej globalnej.</p>
]]></content:encoded>
			<wfw:commentRss>http://adamczuk.net.pl/2010/01/30/wzorzec-projektowy-singleton/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Zend Framework &#8211; wprowadzenie</title>
		<link>http://adamczuk.net.pl/2009/01/20/zend-framework-wprowadzenie/</link>
		<comments>http://adamczuk.net.pl/2009/01/20/zend-framework-wprowadzenie/#comments</comments>
		<pubDate>Tue, 20 Jan 2009 15:36:22 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[oop]]></category>
		<category><![CDATA[zendframework]]></category>
		<category><![CDATA[zf]]></category>

		<guid isPermaLink="false">http://adamczuk.net.pl/?p=113</guid>
		<description><![CDATA[Pierwszy artykuł z serii artykułów opisujących działanie Zend Framework.]]></description>
			<content:encoded><![CDATA[<p>Poniższy artykuł jest początkiem serii artykułów na temat <a href="http://framework.zend.com/">Zend Framework</a>. Cykl artykułów kierowany jest głównie do osób początkujących. W kolejnych artykułach postaram się przedstawić w przystępny sposób podstawowe mechanizmy jakich używa się przy tworzeniu aplikacji internetowych. Programiści, którzy znają Zend Framework najpewniej nie znajdą tutaj wiele ciekawych fragmentów, jednak mimo wszystko zachęcam do analizy artykułu i komentarzy.<br />
<span id="more-113"></span></p>
<h3>Wstęp</h3>
<p>Zakładam, że osoby zainteresowane, tym kursem znają technologie <abbr title="eXtensible HyperText Markup Language">XHTML</abbr> oraz <abbr title="Cascading Style Sheet">CSS</abbr>, gdyż jest to absolutna podstawa w sytuacji gdy chcemy zajmować się aplikacjami internetowymi. Dla osób, które mają małe doświadczenie z nowoczesnymi technologiami oraz standardami sieciowymi polecam niezawodny kurs <a href="http://kurs.browsehappy.pl/Kurs/Spis">BrowseHappy</a>. Kurs ten jest bardzo dobrym wstępem do zrozumienia specyfiki aplikacji internetowych.</p>
<p>Oprócz XHTML i CSS, warto znać podstawy <abbr title="Structured Query Language">SQL</abbr>, który będzie niezbędny przy korzystaniu z bazy danych. W przykładach będziemy korzystać z bazy danych MySQL, a także <abbr title="Hypertext PreProcessor">PHP</abbr>. Znajomość tego języka będzie wymagana, ponieważ sam <strong>Zend Framework</strong> jest obiektowym zestawem narzędzi napisanych w PHP5. Więcej na temat Zend Framework można znaleźć także na polskiej stronie <a href="http://zend-framework.pl/">projektu</a>.</p>
<p>Do prawidłowego funkcjonowania naszych przykładów, jak i prawdziwych aplikacji potrzebne jest także odpowiednie środowisko. Skrótowo takie środowiska noszą nazwy <abbr title="Windows Apache MySQL PHP">WAMP</abbr> i <abbr title="Linux Apache MySQL PHP">LAMP</abbr> w zależności od systemu operacyjnego. Instalacja poszczególnych elementów jest niezbędna, a sposób w jaki to zrobimy jest mało istotny.</p>
<p>Zaletami zestawów WAMP i LAMP są wszystkie składniki, które pobieramy i instalujemy w tym samym czasie. Minusem takiego rozwiązania mogą być nieaktualne składniki, więc najlepiej pobrać wszystkie elementy samemu i dokonać instalacji. Prawidłowa instalacja i konfiguracja środowiska pozwoli nam oglądać stronę <code>http://localhost/</code> na naszym komputerze.</p>
<p>Do pełni szczęścia brakuje nam jeszcze ostatniej wersji Zend Framework, który pobieramy ze <a href="http://framework.zend.com/download/latest">strony</a> producenta. Prawidłowa instalacja nie jest skomplikowana i wymaga jedynie rozpakowania ściągniętego archiwum oraz skopiowania katalogu <code>library</code> do głównego katalogu naszego projektu.</p>
<h3>Architektura MVC</h3>
<p>Zend Framework korzysta z wzorca projektowego <abbr title="Model View Controller">MVC</abbr>, który bardzo dobrze pasuje do specyfiki aplikacji internetowych. Aplikacja napisana przy pomocy tego wzorca zawiera trzy główne składniki:</p>
<dl>
<dt>Model</dt>
<dd>Serce naszej aplikacji. Zawiera klasy PHP i nie zawiera kodu XHTML.</dd>
<dt>Widok</dt>
<dd>Część prezentacyjna naszej aplikacji. Zawiera szablony odpowiedzialne za wizualizację danych.</dd>
<dt>Kontroler</dt>
<dd>Część sterująca naszej aplikacji, która służy do komunikacji modelu i widoku. Kontroler nie powinien zawierać zapytań SQL, ani kodu XHTML.</dd>
</dl>
<p>Zastosowanie wzorca projektowego MVC pozwala na oddzielenie warstwy prezentacyjnej od logiki biznesowej. Takie rozdzielenie daje ogromne korzyści podczas tworzenia projektu, jak i późniejszego rozwijania aplikacji.</p>
<p>Zend Framework korzysta także, z przyjaznych adresów URL, które mają duże znaczenie dla wyszukiwarek internetowych. Aby uzyskać takie przyjazne adresy, najprościej skorzystać z modułu <code>mod_rewrite</code> udostępnianego przez serwer Apache.</p>
<h3>Podsumowanie</h3>
<p>Artykuł ten przedstawia wymagania wobec osoby, która ma zamiar nauczyć się tworzenia aplikacji internetowych w oparciu o Zend Framework. Kolejne odcinki będą opisywać podstawowe klasy frameworka, a także przykłady ich wykorzystania do budowania aplikacji internetowych.</p>
]]></content:encoded>
			<wfw:commentRss>http://adamczuk.net.pl/2009/01/20/zend-framework-wprowadzenie/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Zend Framework 1.7</title>
		<link>http://adamczuk.net.pl/2009/01/19/zend-framework-17/</link>
		<comments>http://adamczuk.net.pl/2009/01/19/zend-framework-17/#comments</comments>
		<pubDate>Mon, 19 Jan 2009 14:15:51 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[oop]]></category>
		<category><![CDATA[zend]]></category>
		<category><![CDATA[zendframework]]></category>

		<guid isPermaLink="false">http://adamczuk.net.pl/?p=101</guid>
		<description><![CDATA[Krótki przegląd usprawnień jakie wprowadzono w Zend Framework 1.7.]]></description>
			<content:encoded><![CDATA[<p><img src="http://adamczuk.net.pl/wp-content/uploads/2009/01/zf.jpg" alt="zend framework 1.7" title="Zend Framework 1.7" width="200" height="100" class="left" />Wprawdzie informacja na temat nowej wersji Zend Framework pojawiła się dość dawno, ale nie miałem jeszcze okazji sprawdzić jego funkcjonalności. Zend Framework jest zestawem klas ułatwiających tworzenie aplikacji internetowych. Może pod względem wydajności i bezpieczeństwa <abbr title="Zend Framework">ZF</abbr> nie jest liderem, ale na pewno jest powszechnie używanym frameworkiem dla <abbr title="Hypertext Preprocessor">PHP</abbr>. Najnowsza wersja Zend Framework znaduje się <a href="http://framework.zend.com/download/latest">tutaj</a>.<br />
<span id="more-101"></span><br />
<strong>Zend Framework 1.7</strong> rozwinął się w dużym stopniu w porównaniu do poprzednich wersji. Wiele wprowadzonych zmian daje szerokie wsparcie dla nowoczesnych technologii internetowych, a także tworzenia usług sieciowych (WebSerivces). Poniżej znajduje się częściowa lista zmian jakie wprowadzono w nowym Zend Framwork 1.7.</p>
<ul>
<li>Zend_Amf i wsparcie dla protokołów AMF0 i AMF3</li>
<li>Dojo Toolkit 1.2.1</li>
<li>Wsparcie dla edytora dijit, dostępnego w Dojo Toolkit</li>
<li>Zend_Service_Twitter</li>
<li>ZendX_JQuery w dodatkowych bibliotekach</li>
<li>Zwiększenie wydajności w Zend_Loader, Zend_Controller i komponentach serwerowych</li>
<li>Poprawione dostarczanie poczty dla Zend_Mail_Storage_Writable_Maildir</li>
<li>Zend_Text_Table dla formatowania tabel</li>
<li>Zend_ProgressBar</li>
<li>Zend_Config_Writer</li>
<li>ZendX_Console_Unix_Process w dodatkowych bibliotekach</li>
<li>Usprawnienia i18N</li>
<li>Polepszenie przesyłania plików</li>
<li>Adapter Zend_Db_Table_Select dla Zend_Paginator</li>
<li>Bardziej elastyczna obsługa typów złożonych w Zend_Soap</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://adamczuk.net.pl/2009/01/19/zend-framework-17/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

