Thread View: pl.comp.objects
2 messages
2 total messages
Started by quas... Robert Perlinski
Fri, 17 Nov 1995 00:00
Czy nasze systemy OO sa naprawde OO?
Author: quas... Robert Perlinski
Date: Fri, 17 Nov 1995 00:00
Date: Fri, 17 Nov 1995 00:00
109 lines
5114 bytes
5114 bytes
Odpowiedz na list Rafala Posmyka 1. Czy relacyjne bazy danych stanowia przeszkode przy tworzeniu systemow obiektowych? > Nie koniecznie. Zalezy od podejscia do sprawy. Niektore > systemy baz danych, mam tu na mysli SQL-Servery, pozwalaja > dzieki sposobowi odpytywania - ja tobie query, ty mi > resultset, na uniezaleznienie applikacji od modelu danych. > Nalezy wiec skonstruowac takie klasy, ktore sa w stanie > zapamietac SQL-statements (chetnie sparametryzowane) i > posiadaja "inteligentny" pojemnik, ktory potrafi przyjac > dowolny zbior wynikowy (resultset), tzn. o dowolnej > liczbie kolumn (dowolnego typu) i linijek. Chodzi mi o to, > aby relacyjnie zapamietane dane przeniesc do objektu. > Inaczej mowiac - dane nie sa (statycznie) reprezentowane > przez "datamember" korespondujacej klasy; klasa posiada > tylko przepis (SQL-statementa) jak sobie odpowiednie dane > "zalatwic". W ten sposob mozna sie dosc elegancko odpiac > od relacyjnego modelu danych. Z puktu widzenia programisty > (uzytkownika takich klass) nie ma znaczenia jak dana klasa > czyta, zapamietuje, zmienia czy kasuje dane. Jasne, ze > effekt ten jest osiagalny dopiero wtedy gdy takie klasy Chyba mnie nie zrozumiales, Twoj sposob nie rozwiazuje niczego. Podam przyklad. Zalozenie: Mamy trzy klasy: Czlowiek <- Kobieta <- Matka (strzalki oznaczaja relacje dziedziczenia, gdzie Czlowiek jest klasa pierwotna). Zalozmy, ze istnieje trzecia klasa Organizacja, ktora jest dynamicznie tworzona kolekcja obiektow ww. klas. I tak np. w danej chwili Organizacja moze zawierac 3 obiekty typu Czlowiek, dziesiec typu Kobieta i sto typu Matka. Oczywiscie klasy Czlowiek, Kobieta i Matka posiadaja funkcje wirualne. Problem: Nalezy obiekt typu Ogranizacja zapisac w bazie danych. Pytanie: Jak to zrobic przy pomocy relacyjnej bazy danych? Oczywiscie ww. problem jest trywialny - w normalnej aplikacji mamy do czynienia ze znacznie bardziej zlozonymi zaleznosciami. Jednak nawet tak banalny problem, przysparza wielu klopotow jesli probuje sie go rozwiazac przy pomocy relacyjnych baz danch. Nie wierzysz? Sprobuj sam. 2. Czy MFC i OWL sa "czysto" obiektowe. > Osobiscie uwazam, ze MFC i OWL, sa barzo objektowe jezeli > wziac pod uwage jakosc windowsowskiego API. Kolesie > poprostu zrobili co mogli i nawet im to wyszlo :-) Rownie dobrze moglbym powiedziec, ze VisualBasic jest bardzo obiektowy biorac "pod uwage jakosc windowsowkiego API" (VB to tez przeciez programowanie w Windows). Chodzi mi o to, ze uzywajac obiektowej biblioteki do programowania w Windows, chcialbym zapomniec o tym, ze cos takiego jak Windows API wogole istnieje. Czy uzywajac MFC udalo ci sie to kiedykolwiek? Wedlug mnie MFC nie jest zla biblioteka, ale z pewnoscia nie jest to dobra biblioteka obiektowa. OWL jest znacznie lepsze pod tym wzgledem - poziom abtsrakcji jest tu o wiele wiekszy. Jeszcze lepszym przykladem jest VCL (Delphi) - w tym przypadku naprawde mozna czasami zapomniec o Windows. Nadal jednak uwazam, ze zadna z ww. bibliotek nie jest "czysto" obiektowa. 3. Delphi i OO > Tu znowu dochodzimy do punktu, gdzie widac jak na dloni, > ze objektowosc applikacji zalezna jest od srodowiska > (np. systemu operacyjnego), w ktorym bedzie ona pracowac. > W tym konkretnym przypadku sa to windowsowskie zaleznosci > okienek - parent/child. Zupelnie sie z Toba nie zgadzam. To, ze w przytoczonym przeze mnie przykladzie, kod wygenerowny przez Delphi jest taki a nie inny, to jedynie "zasluga" Delphi - Windows nie ma z tym kompletnie nic wspolnego (ani tez "windowsowskie zaleznosci okienek - parent/child"). Efekt o ktory mi chodzilo, tzn. kazda strona mojego notatnika - osobna klasa, mozna z powodzeniem osiagnac wklepujac recznie okreslona ilosc kodu. Pozostaje tylko pytanie - dlaczego nie zrobil tego generator? 4. Dlaczego tworzenie "czystych" systemow obiektowych nie jest oplacalne. > Jest tak dlatego, ze nasze objektowe podejscie do > problemow nie jest jeszcze "pelnoletnie". Podejzewam, ze > nasze wnuki bedo sobie z tym lepiej radzic :-) Nie, jest tak dlatego, ze narzedzia, ktorymi posluguja sie programisci obiektowe wcale nie sa. Jesli na moim biurku zamiast VC++, MFC i Sybase SQL Server beda lezec: - dobry kompilator ze zintegorowanym srodowiskiem, ktore wspomaga tworzenie systemu, poprzez wszystkie jego fazy (analiza, projektownie, programowanie), - biblioteka-naprawde-obiektowa, - obiektowa baza danych (WARUNEK KONIECZNY) to jest szansa, ze w logo moich programow bede mogl z duma napisac: system obiektowy. I to by bylo na tyle Robert
Re: Czy nasze systemy OO sa naprawde OO?
Author: raphael... Rafal Posmyk
Date: Wed, 22 Nov 1995 00:00
Date: Wed, 22 Nov 1995 00:00
171 lines
7570 bytes
7570 bytes
In article <9511171...@cig.com>
from 17 Nov 95 21:12:16 GMT
quas...@cig.com (Robert Perlinski) wrote:
> Chyba mnie nie zrozumiales, Twoj sposob nie rozwiazuje
> niczego. Podam przyklad.
Po czesci masz racje. Moj sposob dotyczyl bardziej powiazania
_relacyjnego modelu danych_ z objektowym modelem aplikacji.
Rozwiazuje to napewno sposob komunikacji tych dwoch systemow,
lecz nie pozwala na jenoznaczne odzwierciedlenie objektow
aplikacji w relacyjnej bazie danych. 0,5 punkta dla Ciebie :-)
> Zalozenie: Mamy trzy klasy: Czlowiek <- Kobieta <- Matka
> [...]
> Problem: Nalezy obiekt typu Ogranizacja zapisac w
> bazie danych.
> Pytanie: Jak to zrobic przy pomocy relacyjnej bazy danych?
Relacyjnowato :-) Nie jest to z relacyjnego punktu widzenia
eleganckie ale i nie jest to takze naprawde relacyjne.
Tworze tabele organizacja, kobiety, matka, student (zakladam,
ze czlowiek jako klasa abstrakcyjna nie bedzie instancjowana).
W tabeli organizacja definiuje atrybuty np. czlonek i rodzaj,
gdzie organizacja.czlonek jest "foreign key" relacji 1:n do tabel
kobieta, matka, student, ... w zaleznosci od stalej organi-
zacja.rodzaj (mozna by to nazwac tez "compound foreign key",
raczej zadko stosowany w modelu relacyjnym, jakkolwiek nie
bledny badz nieelegancki). Umozliwia to takze dynamiczne dodawanie
nawych tabel korespondujacych z modelem dziedziczenia:
czlowiek->kobieta->matka-> ... Problem przedstawiac moze
na pierwszy rzut oka mozliwosc stworzenia zbioru wynikowego
(SQL:resultset) zapytania o relacje (SQL: join) np.
matka
/
organizacja
\
student
gdzie pola tabel matka i student nie sa kompatybilne. Da sie to
chyba jednak obejsc przez odpowiednia definicje pol i uzycie
unii (SQL: union), tzn. zbior wynikowy typu:
relacja organizacja -> matka
union
relacja organizacja -> student
Po stronie aplikacji, container przyjmujacy dane zbioru wynikowego
instancjuje w zaleznosci od wartosci pola organizacja.rodzaj,
objekty odpowiednich klas i przekazuje do nich reszte danych.
Alternatywnie: container podczas odczytu zbioru wynikowego:
select organizacja.XX, organizacja.czlonek, organizacja.rodzaj
from organizacja
where organizacja.rodzaj = matka
or organizacja.rodzak = student
dla kazdej jego linijki, instancjuje objekty odpowiednich klas
(organizacja.rodzaj). Kazdy taki objekt posiada "umiejetnosc"
zapytania o dodatkowe informacje na podstawie danych
organizacja.rodzaj (= nazwa tabeli) i organizacja.czlonek
(= "primary key", np. Matki.ID, Studenci.ID).
Spodziewam sie, ze uznasz to za przerarzajaco nieeleganckie :-)
Ma to jednak sporo zalet, np. mieszanie w obrebie jednego
duzego systemu elementow relacyjnach i objektowych. Albo
mozliwosc tworzenia aplikacji (frontend) nieobjektowych.
Jest to o wiele prostsze niz laczenie danych z baz nativ
objekzowych i relacyjnych. Czy mi wierzysz czy nie - takie
praktyki stosuje sie na codzien, nie jest to calkowicie
moj pomysl :-)
> 2. Czy MFC i OWL sa "czysto" obiektowe.
> > Osobiscie uwazam, ze MFC i OWL, sa barzo objektowe jezeli
> > wziac pod uwage jakosc windowsowskiego API. Kolesie
> > poprostu zrobili co mogli i nawet im to wyszlo :-)
> Rownie dobrze moglbym powiedziec, ze VisualBasic jest bardzo
> obiektowy biorac "pod uwage jakosc windowsowkiego API" (VB
> to tez przeciez programowanie w Windows).
Nie znam dobrze czystego VB, raczej "VB for apllikation"
ale w swietle mojej poprzedniej tezy. mozna by cos takiego
powiedziec. Moze troche dokladniej (takze w stosunku do
OWL i MFC): "objektowy interfejs do Windows API".
> ... Chodzi mi o to, ze
> uzywajac obiektowej biblioteki do programowania w Windows,
> chcialbym zapomniec o tym, ze cos takiego jak Windows API
> wogole istnieje. Czy uzywajac MFC udalo ci sie to
> kiedykolwiek? Wedlug mnie MFC nie jest zla biblioteka, ale
> z pewnoscia nie jest to dobra biblioteka obiektowa. OWL jest
> znacznie lepsze pod tym wzgledem - poziom abtsrakcji jest
> tu o wiele wiekszy.
Moj drogi nie zapominaj, ze MFC i OWL sa bibliotekami do
GUI !!! A gdzie reszta systemu, gdzie operacje na zbiorach,
gdzie I/O, gdzie siec, ...
Zobacz http://www.startdiv.de pod haslem StarView i Solar.
Sam tego jeszcze w lapach nie mialem, ale jezeli zrealizuja
to wszystko co obiecali to bedziesz/bedziemy mieli "idealna"
OO-Lib na Win, OS/2, X11/Motif, MAC
> 3. Delphi i OO
> > Tu znowu dochodzimy do punktu, gdzie widac jak na dloni,
> > ze objektowosc applikacji zalezna jest od srodowiska
> > (np. systemu operacyjnego), w ktorym bedzie ona pracowac.
> > W tym konkretnym przypadku sa to windowsowskie zaleznosci
> > okienek - parent/child.
> Zupelnie sie z Toba nie zgadzam. To, ze w przytoczonym przeze
> mnie przykladzie, kod wygenerowny przez Delphi jest taki a
> nie inny, to jedynie "zasluga" Delphi - Windows nie ma z tym
> kompletnie nic wspolnego (ani tez "windowsowskie zaleznosci
> okienek - parent/child").
Pisalem juz o tym w innej czesci tej dyskusji (chyba inny
watek).
Windows narzuca pewien styl programowania, a Delphi tylko
go przejmuje. Tak wiec krytyka tyczyc sie powinna Windows,
co do stylu i Delphi co do nowatorstwa (a nie stylu).
Fajnie by bylo, gdyby mozna takiemu "application builder"
przekazac wlasne upodobania co do stylu programowania.
Zna ktos co w tym stylu ?
> 4. Dlaczego tworzenie "czystych" systemow obiektowych nie
> jest oplacalne.
> > Jest tak dlatego, ze nasze objektowe podejscie do
> > [..]
> Nie, jest tak dlatego, ze narzedzia, ktorymi posluguja sie
> programisci obiektowe wcale nie sa. Jesli na moim biurku
> zamiast VC++, MFC i Sybase SQL Server beda lezec:
> - dobry kompilator ze zintegorowanym srodowiskiem, ktore
> [...]
> to jest szansa, ze w logo moich programow bede mogl z duma
> napisac: system obiektowy.
Ja natomiast wtedy, gdy rozszerzenie systemu np. archiwizacji
dokumentow o mozliwosc czytania danych z projektora do mikrofilmow
(obok dotychczasowych metod: scaner, dia-projektor, telefax) bedzie
sie ograniczalo do stworzenia nowej klasy pochodnej, zmiany
kilku funkcji wirtualnych i dodania kilku nowych, dla czytnika
mikrofilmow specyficznych, dialogow. Nie bedzie mi w takim ukladzie
zbyt przeszkadzac fakt, ze do komunikacji z ww. czytnikiem uzyje
wstretnego Win API, czy tez bede zmuszony uzywac nie w pelni
objektowego kompilatora/srodowiska albo bibliotek. Wystarczy mi,
ze mam swiadomosc, iz moj system posiada objektowa architekture :-)
A mojemu zleceniodawcy bede mogl zakomunikowac iz naklad czasowy
zamknie sie w granicach 15 osobodni :-)
Rafal
o-------------------------------------------------------------------o
| Raphael Posmyk (Hamburg, Germany) |
| "... carpe diem, quam minimum credula postero..." (Horatius) |
| Please send/reply all to raphael...@hamburg.netsurf.de |
o-------------------------------------------------------------------o
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads