Niezalogowany [ logowanie ]
Subskrybuj kanał ATOM Kanał ATOM

Autor wpisu: bastard13, dodany: 23.09.2011 14:46, tagi: php

trochę przydługi wstęp...

Jest szereg tutoriali pokazujących jak wykorzystać techniki obiektowe, jak je zastosować w kodzie, ale w większości z nich brak jednej ważnej informacji - OOP to przede wszystkim obiektowe myślenie. Techniki i sposób ich implementacji w danym języku programowania są jak język mówiony i gramatyka, są czymś zmiennym. Natomiast sposób myślenia obiektowego, umiejętność podejmowania decyzji w kwestiach relacji między klasami jest czymś stałym. Nie ważne, czy piszesz kod w PHP, Javie, C++ itp., ponieważ, jeżeli potrafisz poprawnie zaprojektować strukturę, to będzie ona uniwersalna, zmieni się jedynie sposób przetłumaczenia tego na język zrozumiały dla interpretera/kompilatora.A więc o czym to będzie?Właściwie to o tym samym, co wszędzie, czyli podstawy takie, jak: dziedziczenie, interfejsy, abstrakcje, hermetyzacja itd. Z tym, że oprócz przykładu użycia postaram się jeszcze przedstawić tok myślenia, który się za tym kryje. Tak, więc np. w dziedziczeniu nie chodzi tylko o to, że mamy dwie klasy Samochód i Samolot, które dziedziczą po abstrakcyjnej klasie Pojazd:)Postaram się zaprezentować przykłady, kiedy dane rozwiązanie jest niekoniecznie dobre lub całkiem złe.Tak naprawdę najwięcej będzie o myśleniu, bo w gruncie rzeczy do tego OOP się sprowadza. Ostatnim etapem dobrego programowania obiektowego jest pisanie kodu.

programowanie obiektowe - wtf?

Programowanie obiektowe jest to przedstawienie świata rzeczywistego i relacji w nim zachodzących, za pomocą obiektów. Najważniejszymi cechami programowania obiektowego są:
  • Abstrakcja
  • Enkapsulacja
  • Dziedziczenie
  • Polimorfizm
Wszystkie te pojęcia rozwinę w kolejnych wpisach.Dzisiaj skupię się na kwestiach językowych, które są niezbędne do rozpoczęcia zabawy z OOP:

klasa

Klasa jest to typ zmiennej z punktu widzenia programowania, natomiast w ujęciu projektowym jest to ogólna definicja pewnej grupy powiązanych ze sobą obiektów. Klasa definiuje metody, czyli funkcjonalność, które są dostarczane przez obiekty. Poza tym definiuje również atrybuty, które są indywidualne (nie zawsze, ale do tego tematu jeszcze wrócę:) dla konkretnych obiektów. Czym jest obiekt? Jest to instancja danej klasy, czyli konkretna zmienna danego typu. Prosty przykład:Janek, Ania, Zosia to obiekty klasy Człowiek. Każde z nich może spać, jeść, poruszać się i to są właśnie metody zdefiniowane w klasie Człowiek. Oprócz tego każdy człowiek posiada imię oraz datę urodzenia, jednak są one indywidualne dla każdego obiektu, czyli nie są bezpośrednio powiązane z klasą, a z obiektem danej klasyA jak coś takiego napisać?
<?phpclass Human{  private $_name;  private $_birthDate;    public function __construct($name, $birthDate) {/*...*/}  public function eat() {/*...*/}  public function sleep() {/*...*/}  public function move() {/*...*/}}$janek = new Human('Janek', '1982-01-09');$anna = new Human('Anna', '1950-02-19');$zosia = new Human('Zosia', '1999-11-17');
Z informacji dotyczących klasy warto przeczytać jeszcze o operatorach widoczności.

abstrakcja i dziedziczenie

Klasa abstrakcyjna różni się od zwykłej klasy tym, że nie można utworzyć jej instancji. Może ona również dostarczać metod abstrakcyjnych, czyli metod, które zostały zadeklarowane i muszą zostać zdefiniowane w klasach potomnych. Aby to rozjaśnić rozwinę przykład z poprzedniego akapitu:Pomimo iż Janek, Ania i Zosia są obiektami klasy Człowiek, to są pewne różnice charakterystyczne dla grup np. Ani i Zosia mogą urodzić dziecko, ponieważ są Kobietami, natomiast Janek nie doświadczy tego przywileju gdyż jest Mężczyzną. Dodatkowo różni ich też sposób sikania, pomimo tego, że i Kobiety i Mężczyźni to robią. Więc tak naprawdę żadne z nich nie jest tylko Człowiekiem, ale jest albo Kobietą, albo Mężczyznąi kod:
<?phpabstract class Human{  private $_name;

Czytaj dalej tutaj (rozwija treść wpisu)
Czytaj dalej na blogu autora...

Autor wpisu: Tomasz Kowalczyk, dodany: 23.09.2011 02:00, tagi: javascript

Dzisiaj odbył się pierwszy dzień konferencji onGameStart, o której pisałem wczoraj. Zapraszam do zapoznania się z relacją z tego, co dzisiaj widziałem i słyszałem z ust prowadzących i innych uczestników.     Fotografia: onGameStart. Konferencja onGameStart - dzień pierwszy. Dzisiejszy dzień był naprawdę pełen wrażeń od samego rana. Pobudka o 7:00, szybkie "ogarnięcie się", sprawdzenie, [...]

Autor wpisu: Tomasz Kowalczyk, dodany: 22.09.2011 02:20, tagi: javascript

Już jutro odbędzie się konferencja onGameStart, której tematyką jest tworzenie gier w języku JavaScript i wszelkie techniki / technologie z tym związane. Jako, że będę jutro jednym z jej uczestników, zapraszam do krótkiego wprowadzenia do imprezy, którą już jutro (dzisiaj :)) / pojutrze postaram się dla Was zrelacjonować.     Fotografia: onGameStart. Konferencja onGameStart 2011. [...]

Autor wpisu: batman, dodany: 21.09.2011 08:00, tagi: javascript

W pierwszej części serii opisującej krok po kroku tworzenie rozszerzeń do Google Chrome, zarysowałem wygląd rozszerzenia oraz obiecałem, że w kolejnej części przyjrzymy się manifestowi. Ponieważ sam manifest nie jest ciekawy i za dużo na jego temat nie da się napisać (wszystko jest dokładnie opisane w dokumentacji), opiszę jego najbardziej interesujące elementy.

Plik manifestu jest niczym innym jak najzwyklejszym plikiem tekstowym w formacie JSON, którego dokładny opis znajdziemy pod adresem http://code.google.com/chrome/extensions/manifest.html. Nas najbardziej interesują pola wymagane (plus zalecane) oraz pola odpowiedzialne za wizualną reprezentację rozszerzenia.

Do pierwszej grupy pól zaliczają się nazwa rozszerzenia (name), jego wersja (version) oraz opis (description). Nic interesującego. Znacie ciekawiej prezentują się pola pozwalające na dodanie do rozszerzenia kodu reagującego na akcje użytkownika i wykonujące zadane czynności. Do dyspozycji mamy aż pięć rodzajów plików, które możemy utworzyć. Są to:

  • akcja przeglądarki (browser action)
  • akcja strony (page action)
  • skrypt działający w tle (background page)
  • skrypt treści (content script)
  • opcje

Pierwsze dwa nie różnią się zbytnio od siebie i służą prawie do tego samego – wyświetlenia chmurki po kliknięciu w ikonę rozszerzenia. Czym się zatem różnią? Browser action działa w kontekście przeglądarki, a page action w kontekście strony. Oznacza to, że w pierwszym przypadku ikona rozszerzenia zagości w oknie przeglądarki obok paska adresu, a w drugim wewnątrz paska adresu. Z technicznego punktu widzenia oba sposoby niewiele się od siebie różnią.

Skrypt działający w tle jest dokładnie tym, na co wskazuje nazwa. Działa on w tle i może reagować na akcje użytkownika lub przeglądarki. Oczywiście nic nie stoi na przeszkodzie, aby co jakiś czas łączył się do zdalnego serwera i pobierał np. informacje o nowych mailach. Warto wiedzieć, że background page działa w osobnym procesie i może zostać w dowolnym momencie “ubity”.

Kolejny rodzaj pliku jest równie ciekawy jak poprzednie. Content script jest skryptem JavaScript, który możemy dokleić do strony i go na niej wykonać. Doskonale się on nadaje do wprowadzania zmian w aktualnie przeglądanej stronie oraz pobieraniu z niej informacji. Co więcej przy pomocy content script jesteśmy w stanie dodać do strony własny kod CSS.

Pozostawione na koniec opcje, są po prostu opcjami. To przy pomocy tego pliku ustawiamy modyfikowalne przez użytkownika parametry rozszerzenia.

W kolejnej części serii w końcu napiszemy jakiś kod. Utworzymy pierwsze rozszerzenie i na jego podstawie przyjrzymy się różnicom między browser action i page action.

Autor wpisu: Tomasz Kowalczyk, dodany: 20.09.2011 22:59, tagi: design

Strony internetowe (i nie tylko) składają się z wielu elementów - jedne są bardziej widoczne, inne mniej. O ile każdy z nas jest w stanie wymienić co najmniej kilka elementów składających się na dobry design, o tyle pewne z nich są na tyle transparentne, że czasem zupełnie o nich zapominamy. Tak sprawa ma się zazwyczaj [...]

Autor wpisu: bigzbig, dodany: 20.09.2011 01:41, tagi: php, mysql

Na początku mojej nauki PHP kupiłem sobie książkę „PHP4 Aplikacje” (Tobiasa Ratschiller i Till Gerken – Wydawnictwo Robomatic). Zawarta w tej lekturze tematyka była wtedy dla mnie zbyt zaawansowana i potem wielokrotnie wracałem do tej pozycji stopniowo dojrzewając do poruszanych w niej tematów. Najdłużej wzbraniałem się przed zgłębieniem wiedzy dotyczącej operacji na bitach. Dzisiaj nie [...]

Autor wpisu: bastard13, dodany: 19.09.2011 15:18, tagi: php

pre { border: #aaa solid 1px; padding: 10px; margin: 5px 5px 15px 5px; font-family: "Courier New",Courier,monospace; background-color: #f9f9f9 !important;}pre span.key_word { color: #006699 !important; font-weight: bold;}pre span.comment { color: #008200 !important;}pre span.variable{ color: #AA7700 !important;}pre span.string{ color: blue !important;}pre span.functions{ color: #FF1493 !important;}p { margin: 0px;}W PHPie istnieją trzy przydatne słowa kluczowe będące referencją do metod oraz atrybutów klas. Wykorzystuje się je przy dziedziczeniu i są to: self, parent, static.Parent odnosi się do metod/atrybutów klasy bazowej:
<?phpclass A {    public function foo() {        return 'class A, method foo()';    }}class B extends A{    public function foo() {        return 'class B, method foo() and parent: ' .                 parent::foo();    }}$object = new B;echo $object->foo();
Powyższy kod dana nam wynik:
class B, method foo() and parent: class A, method foo()
Self odnosi się do metod/atrybutów klasy, które są zdefiniowane w bieżącym kodzie, czyli jeżeli mam klasę A w niej metody foo() i boo(), gdzie chcę, żeby metoda foo() zaimplementowana w klasie A, zawsze odnosiła się do metody boo() z klasy A, nawet jeżeli w klasach potomnych zostanie nadpisana, to właśnie wtedy stosujemy słowo kluczowe self:
<?phpclass A {    public function foo() {        return self::boo();    }    public function boo() {

Czytaj dalej tutaj (rozwija treść wpisu)
Czytaj dalej na blogu autora...

Wszystkie wpisy należą do ich twórców. PHP.pl nie ponosi odpowiedzialności za treść wpisów.