![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 254 Pomógł: 0 Dołączył: 30.12.2003 Skąd: Strzegom Ostrzeżenie: (0%) ![]() ![]() |
Witam,
wszędzie człowiek napotyka się na to hasło: programowanie obiektowe, no i aby być w temacie, trzeba było coś w tym kierunku robić. W tym celu przeczytałem artykuł zamieszczony na łamach php.pl Wprawdzie dowiedziałem się tam podstaw, ale nie rozumiem wielu rzeczy. Dla mnie najlepszym narzędziem do nauki jest sam przykład programowania tradycyjnego i przerobienie go na obiektowe. W poniżej zamieszczonym skrypcie (nie działającym zresztą) spróbowałem przerobić to, co mam już zrobione, na sposób obiektowy zgodnie ze wskazówkami z różnych książek.
proszę o wyjaśnienie następującego zagadnienia: w momencie jak w metodzie wyswietl_tytuly_filmow pobiore dane z bazy danych to w OO należy je również potraktować pętlą czy też stosuje się do tego inne narzędzia ![]() ![]() a tak nawiasem mówiąc to zwróciło mi następujące błędy: unexpected T_VARIABLE, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' proszę o jakieś wskazówki niekoniecznie usunięcia błędów lecz o tym co po drodze powinno się robić z takimi danymi... pozdrawiam -------------------- Bieganie jest tym co kocham najbardziej, jest dla mnie powietrzem w moich płucach, krwią płynącą w żyłach, dawką endorfin, źródłem szczęścia i celem samym w sobie... A w skrócie to jestem uzależniony od biegania.
primo gg1148730 |
|
|
![]()
Post
#2
|
|
Administrator PHPedia.pl Grupa: Developerzy Postów: 1 102 Pomógł: 2 Dołączył: 14.09.2003 Ostrzeżenie: (0%) ![]() ![]() |
miałeś nie zamkniętą klamre proponuję trzymać klasy w osobnym pliku zmień nazwy zmiennych tak trochę trudno zrozumieć o co chodzi jak ma się 3 takie same zmienne, które robią co innego ![]() Ten post edytował bela_666 17.10.2004, 21:25:44 -------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarząd Postów: 2 277 Pomógł: 6 Dołączył: 27.12.2002 Skąd: Wołów/Wrocław ![]() |
1. niestety - twój przykład ma bardzo niewiele wspólnego z OOp . (dosłowniej mówiąc - łączy z nim go tylko słowo class) jesli znajdę chwilę czasu - napiszę swoją propozycję takiej klasy
2.
-------------------- "Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 254 Pomógł: 0 Dołączył: 30.12.2003 Skąd: Strzegom Ostrzeżenie: (0%) ![]() ![]() |
no prawdę mówiąc takiej odpowiedzi się spodziewałem. Czytając dziś pół dnia to co mi się dostało w ręce odnośnie OOp wiele razy przy pierwszych próbach "zabawy" kończyło się to skwitowaniem, że ninijszy skrypt nie ma nic wspólnego z programowaniem obiektowym. Z deko mi jest to ciężko pojąć, bo pomimo, iż używam mechanizmów stosowanych w OOp to jednak nie tworzę skryptu opartego o OOp. Trochę to zagmatwane.
Z niecierpliwością oczękuję "obiecanej klasy". Proszę tylko o umieszczenie jej w zaczętym już właśnie tym temacie, aby mi przypadkiem gdzieś nie umknęła. zapmniałbym: w sumie to myślałem że ta zmienna (która występuje w 3 postaciach wg bela_666) to to samo. Nie jest tak ![]() pozdrawiam Ten post edytował primo 17.10.2004, 21:43:24 -------------------- Bieganie jest tym co kocham najbardziej, jest dla mnie powietrzem w moich płucach, krwią płynącą w żyłach, dawką endorfin, źródłem szczęścia i celem samym w sobie... A w skrócie to jestem uzależniony od biegania.
primo gg1148730 |
|
|
![]()
Post
#5
|
|
Administrator PHPedia.pl Grupa: Developerzy Postów: 1 102 Pomógł: 2 Dołączył: 14.09.2003 Ostrzeżenie: (0%) ![]() ![]() |
$this->pl odnosi sie do var $pl, ale $pl nie odnosi sie do var $pl
primo, tutaj chodzi o myślenie obiektowe, a nie o sposób zapisu ![]() -------------------- |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 254 Pomógł: 0 Dołączył: 30.12.2003 Skąd: Strzegom Ostrzeżenie: (0%) ![]() ![]() |
właśnie tego nie mogę przezwyciężyć i pojąć
-------------------- Bieganie jest tym co kocham najbardziej, jest dla mnie powietrzem w moich płucach, krwią płynącą w żyłach, dawką endorfin, źródłem szczęścia i celem samym w sobie... A w skrócie to jestem uzależniony od biegania.
primo gg1148730 |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarząd Postów: 3 503 Pomógł: 28 Dołączył: 17.10.2002 Skąd: Wrocław ![]() |
No to na początek trochę teorii. (Polecam "Thinking in Java")
Ty powinieneś zaprojektować obiekt klasy Film oraz obiekt klasy Lista filmów. Klasa Film opisuje właściwości: - ID - Tytuł - Rok produkcji - Reżyser (przy czym Reżyser to powinien być osobny obiekt klasy Osoba) - Wypozyczający (obiekt klasy Osoba) oraz metody: - zapiszDane() zapisajaca jednym insertem jeden rekord w bazie - czytajDane() która powinna odczytać dane jednego filmu na podstawie np. ID - aktualizuj() - jeden UPDATE jednego ściśle okreslonego (np. przez ID) filmu - usuń() - jeden DELETE na rekordzie jak wyżej - wypożycz() - ustawia znacznik wypozyczenia na True, ID wypozyczajacego, date wypozyczenia. Wywoluje metodę metodę wypozyczyl() obiektu Wypozyczajacy, ktora dodaje film do archiwum wypozyczonych tytulow. - zwróc() - ustawia znacznik wypozyczenia na false, itp... Klasa ListaFilmów ma głownie właściwosć - Lista (ktora jest tablicą) oraz metody w stylu - Czytaj_listę - usuń() (dla okreslonych filmow wywoluje ich metodę Usuń() i kasuje (unset()) ichistnienie z tablicy. - .... Prawdopodobnie niedlugo pokaze kod pewnego skryptu, ktory staralem sie napsiac obiektowo (dla php4) - na pewno bedzie wiele poprawek i ktos bardziej doswiadczony w OOD/OOP mi wytnie wiele niescislosci, ale moze sie to okazac niezla szkołka praktyczna dla poczatkujacych ![]() -------------------- |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 254 Pomógł: 0 Dołączył: 30.12.2003 Skąd: Strzegom Ostrzeżenie: (0%) ![]() ![]() |
wielkie dzięki za tak obszerny wykład, co nieco rozjaśniło to moje wątpliwości. Jednakże mam jeszcze jedno pytanko: mianowicie konstruując klasę Film i nadając jej właściwości typu: id, tytuł polski, tytuł oryginalny, rok produkcji, czas trwania, rodzaj nośnika na jakim go mam (vhs lub dvd), gatunek, rezenzja oraz 2 dotyczące określonych osób: reżysera i aktorów występujących - dlaczego to powinien być osobny obiekt klasy osoba
![]() ![]() pozdrawiam -------------------- Bieganie jest tym co kocham najbardziej, jest dla mnie powietrzem w moich płucach, krwią płynącą w żyłach, dawką endorfin, źródłem szczęścia i celem samym w sobie... A w skrócie to jestem uzależniony od biegania.
primo gg1148730 |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarząd Postów: 3 503 Pomógł: 28 Dołączył: 17.10.2002 Skąd: Wrocław ![]() |
No i już wyniknął problem źle zaprojektowanej bazy.
Trzymasz w bazie tabele: Osoba (ID, Imię, Nazwisko); Klient (ID, IDOsoba); Rezyser (ID, IDOsoba) Aktor( ID, IDOsoba) Film( ID, Tytul, ...., IDKlient (jesli wypozyczony), IDRezyser, IDAktor (tu moze byc serializowana tablica zapisywana do pola TEXT) ) Dlaczego Rezyser i Wyporzyczajacy powinni byc jako osobne obiekty klasy Osoba? Bo:
oraz
Jedyną wadą OOD/OOP jest to, ze autor skryptu musi mieć bardzo rozwinięte myślenie abstrakcyjne, a sam proces projektowania zajmuje nieco czasu. Jednak jeśłi dobzre napiszesz klasy, to operacje na obiektach to już pryszcz. -------------------- |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 254 Pomógł: 0 Dołączył: 30.12.2003 Skąd: Strzegom Ostrzeżenie: (0%) ![]() ![]() |
ale powiedz mi, czy Ty mi to tłumaczysz pod kątem przygotowania aplikacji obługującej wypożyczalnie kaset i płyt dvd, czy też przerobienia strony www i na obiekty i dostosowania bazy
![]() Osoba (ID, Imię, Nazwisko); Klient (ID, IDOsoba); Rezyser (ID, IDOsoba) Aktor( ID, IDOsoba) Nie wiem, może właśnie nie myślę na tyle abstrakcyjnie, aby te tabele umieścić w projekcie ![]() ![]() ![]() ![]() pozdrawiam -------------------- Bieganie jest tym co kocham najbardziej, jest dla mnie powietrzem w moich płucach, krwią płynącą w żyłach, dawką endorfin, źródłem szczęścia i celem samym w sobie... A w skrócie to jestem uzależniony od biegania.
primo gg1148730 |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarząd Postów: 3 503 Pomógł: 28 Dołączył: 17.10.2002 Skąd: Wrocław ![]() |
Ja tłumacze na dowolnym przykładzie, w którym, moge przekazać Tobie treść tłumaczenia na zywym przykładzie.
Zresztą nie rozmawiamy tutaj o strukturze Twojej bazy, tylko o OOD/OOP. Powtórze jeszcze raz. Idealnie zaprojektowana aplikacja zakłada, ze wszystko jest obiektem. Takie myslenie jest wbudowane w podstawę logiki np. Javy, gdzie nawet INT to obiekt. Co do bazy. Co da oddzielenie np. osob do osobnej tabeli? Ano to: - masz mniej danych. - łączysz film z osoba poprzez (int) ID, a działania na intach są najszybsze. - możesz rozbudowac informacje o osobie ponad imię i nazwisko. - zmiana nazwiska z "Jan Kowalski" na "Jan Nowak" polkega na zmienie jednego rekordu w bazie a nie wszystkich rekordow, gdzie pisze "Kowalski" Uff ![]() Już to komuś tłumaczyłem kiedyś na forum. Poszukaj na forum "słownikowanie" - chyba się jeszcze post zachował. -------------------- |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 254 Pomógł: 0 Dołączył: 30.12.2003 Skąd: Strzegom Ostrzeżenie: (0%) ![]() ![]() |
ok od tej pory w tym temacie tylko i wyłącznie OOP. Powiedz mi tylko jedno, czy taki podział i rozdrobnienie bazy to jeszcze baza relacyjna czy już obiektowa albo hybrydowa
![]() czekam na obiecane skrypty od Szanownych przedmóców. pozdrawiam -------------------- Bieganie jest tym co kocham najbardziej, jest dla mnie powietrzem w moich płucach, krwią płynącą w żyłach, dawką endorfin, źródłem szczęścia i celem samym w sobie... A w skrócie to jestem uzależniony od biegania.
primo gg1148730 |
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 521 Pomógł: 0 Dołączył: 3.11.2003 Skąd: 3city Ostrzeżenie: (0%) ![]() ![]() |
Baza danych? Relacyjna, jak najbardziej relacyjna. Widziałeś kiedyś obiektową bazę danych? Np O2. Kosmos. Używałeś kiedyś OQL? Nijak nie przypomina SQL.
Hybrydowe bazy są już nieco bardziej strawne. Np. taki Oracle z wszystkimi swoimi obiektami. Ale tak naprawdę nie za bardzo to jest obiektowe. Obiektowymi bazami danych to ja bym sobie na razie nie zawracał głowy. A normalizacja bazy danych to element teorii relacyjnych baz danych. Bo obiektowych w ogóle nie trzeba będzie normalizować ![]() |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 12.06.2025 - 22:36 |