Forum Coders' city Strona Główna Coders' city
Nasza pasja to programowanie!
 

 PomocPomoc   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy  RejestracjaRejestracja 
Archiwum starego forum + teoria    RSS & Panel/SideBar
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

Potrzebuję szybkiej odpowiedzi na moje pytanie... Zasady

Książki do nauki obiektowości

Idź do strony 1, 2  Następny

 
Odpowiedz do tematu    Forum Coders' city Strona Główna -> Java
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
R



Dołączył: 06 Sty 2016
Posty: 24

PostWysłany: Pią Sty 08, 2016 5:42 pm  OP    Temat postu: Książki do nauki obiektowości Odpowiedz z cytatem Pisownia

jakie polecacie tutoriale lub książki do zrozumienia obiektowości w programowaniu ?


chodzi o to , że literalnie wiem jaka jest różnica między programowaniem strukturalnym a obiektowym, jednak w praktyce nie... i w praktyce nie wiem czym są kolekcje, obiekty (co wychodzi podczas rozmów z ludźmi z IT) itd...

_________________
kodzę w R
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
marcin_an
Site Admin


Dołączył: 26 Maj 2005
Posty: 18736

PostWysłany: Pią Sty 08, 2016 7:09 pm      Temat postu: Odpowiedz z cytatem Pisownia

Obiektowość to nie kolekcje i obiekty (to tylko narzędzia konkretnego języka), lecz sposób myślenia o aplikacji i jej modelowania. To, że użyjesz słówka class i operatora ., albo że zastosujesz jakiś kontener nie czyni programu w żaden sposób obiektowym. Może nawet nie kwalifikować się do bycia nazwanym strukturalnym! Analogicznie obiektowo możesz rzeźbić nawet w C, czy - przy odrobinie samozaparcia - języku asemblerowym.

Książki nie polecę (chyba za dawno sam się uczyłem), ale od razu zawiadamiam: książka cię niczego nie nauczy. Dobra publikacja może być faktycznie nieocenioną pomocą i świetnym przewodnikiem po obiektowości, ale - podobnie jak programowania ogólnie - obiektówki możesz nauczyć się tylko próbując tworzyć aplikacje, szukając w nich niedoskonałości, analizując rozwiązania innych, nanosząc poprawki, testując i wracając do początku tego procesu.

Nie daj sobie tylko wmówić, że obiektowość jest niewydajna. 10 lat temu zdecydowanie tak: języki i środowiska wykonawcze pozostawiały wiele do życzenia, biblioteki były tragicznie źle zaprojektowane i napisane, a rozwiązania dopiero odkrywane. Ale nie dzisiaj. Jeżeli dzisiaj obiektowy program jest powolny, to jest to wina niedoświadczonego projektanta, a nie paradygmatu. Każdy program obiektowy musi dać się napisać w sposób dający wydajność porównywalną ze strukturalnym*, a ponieważ obiektówka nakłada na programistę większe restrykcje niż programowanie strukturalne, czyli kompilatorowi i środowisku wykonawczemu daje dużo większe pole do popisu, to w ostateczności w którymś momencie może spokojnie wyprzedzić ten starszy paradygmat.
____
* Być może kwestia doboru odpowiednich narzędzi, być może nadal będzie nieistotna różnica, ale da się.
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
R



Dołączył: 06 Sty 2016
Posty: 24

PostWysłany: Pią Sty 08, 2016 7:46 pm  OP    Temat postu: Odpowiedz z cytatem Pisownia

a może macie jakieś linki do przykładów czym się różni obiektowy od strukturalnego?

(na przykładzie kilkanascie linijek kodu np. kalkulator czy sorotwanie)

_________________
kodzę w R
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
marcin_an
Site Admin


Dołączył: 26 Maj 2005
Posty: 18736

PostWysłany: Pią Sty 08, 2016 8:03 pm      Temat postu: Odpowiedz z cytatem Pisownia

Na przykładzie kilkunastu linijek kodu się nie da, bo do czegoś tak prostego nie warto nawet zaprzęgać modelu obiektowego. To tak, jakbyś właśnie prosił, żebyśmy ci pokazali, czym się różnią pedały w rowerze od rakiety kosmicznej na przykładzie roweru :).

Zresztą w kilkunastu linijkach nawet nie da się sensownie użyć obiektowości. Musi być przynajmniej kilka współpracujących ze sobą klas, które dodatkowo robią coś konkretnego. Dla kalkulatora jeszcze na siłę można stworzyć jakiś skrajnie prymitywny model obiektowy, ale będzie to wyglądało kiepsko: rozbuchany kod, który w większości nic nie robi oprócz zajmowania miejsca.
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
R



Dołączył: 06 Sty 2016
Posty: 24

PostWysłany: Pią Sty 08, 2016 8:05 pm  OP    Temat postu: Odpowiedz z cytatem Pisownia

:((
_________________
kodzę w R
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
hurgadion



Dołączył: 06 Kwi 2011
Posty: 708
Skąd: Web :)

PostWysłany: Pią Sty 08, 2016 8:51 pm      Temat postu: Odpowiedz z cytatem Pisownia

Zajrzyj na portal coursera, jest tam co najmniej 8 kursów z Javy na różnym poziomie trudności... można zacząć od zera, ale nawet te dla początkujących są wymagające ciut, jest sporo praktycznych przykładów z życia wziętych (bynajmniej nie jest to mnożenie macierzy, liczenie wyznaczników, wyznaczanie wartości własnych macierzy, itp.)... a jak to w Javie, same obiekty... pracowałem na danych opisujących trzęsienia ziemi... na prawdziwych danych a'la GPS, które są zaimplementowane w Androidzie (nie wiedziałem, że na przykład na obiekty typu Location są prawa autorskie), itp. Pod względem praktyki i dydaktyki oceniam te kursy bardzo wysoko...

a co do różnic w programowaniu obiektowym i strukturalnym to ja większej różnicy nie widzę... i tu są pętle i tu... i tu są mapy haszujące (słowniki) i tu... i tu są implementowane algorytmy i tu... :) wydaje mi się, że w programowaniu obiektowym wszystko dokładnie jest poklasyfikowane pod kątem użyteczności (jeżeli ostatnie zdanie mija się z prawdą, to proszę o korektę), no ale to zależy jeszcze dużo osoby, która wprowadza obiektowość, można to robić na wiele sposobów... czasem można po kodzie poznać kto kodził... :) generalnie: temat rzeka :)

a co do książek, to odradzam czytanie... najlepiej uczyć się na przykładach, na rozwiązywaniu praktycznych problemów... czyli na kodzeniu... a w sieci jest wszystko, a czasem więcej niż potrzeba na ten temat... może wstyd sie przyznać... ale ja jak mam internet to do książek praktycznie nie zaglądam... :) co jakiś czas ścieram z nich kurz... :)

_________________
miasto nauki praktycznej
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora Numer GG
samolot



Dołączył: 26 Sty 2006
Posty: 8008
Skąd: Toruń

PostWysłany: Pią Sty 08, 2016 10:19 pm      Temat postu: Odpowiedz z cytatem Pisownia

Ja obiektowość rozumiem tak, że każdy obiekt robi cos atomowego i nic więcej. Jeśli mam się wykąpać, to idę to zrobić do łazienki, czyli używam obiektu łazienka, a w łazience tylko i wyłącznie się kapię, a nie czytam jeszcze gazety, ani nie korzystam z WC, bo w myśl obiektowości, w tym celu idę do WC, a jeśli chce poczytać gazetę, to idą do czytelni. W ten sposób każdy obiekt typu "mieszkaniec" w domu korzysta z innych obiektów takich jak łazienka czy czytelnia tylko w celach do tego przeznaczonych. W żadnym razie w łazience nie czytamy, w tym calu używamy czytelni. Wyższym stopniem obiektowości jest to, że z łazienki, WC i czytelni korzystają nie tylko mieszkańcy jednego mieszkania, lecz mieszkańcy całego osiedla. Po co każdy mieszkaniec bloku ma mieć swoje WC, swoją łazienkę, czy własną czytelnię, to zbędne dublowanie takich samych obiektów.
Wystarczy jedna łazienka na osiedlu, z której korzystają wszystkie inne obiekty. Łazienka może mieć metodę zliczania osób kapiących się. Gdybyś miał w każdym mieszkaniu osobna łazienkę i każda by miała swój licznik, to niepotrzebnie dublowałbyś łazienki, a gdybyś chciał zliczyć ile osób się wykąpało w styczniu to musiałbyś zsumować wyniki z wszystkich łazienek. Jedna łazienka dla wszystkich zwróci Ci natychmiast liczbę kąpiących się. Mając jedną łazienkę, możesz łatwiej reagować na jej błędy, na przykład łazienka zgłasza błąd, że nie ma cieplej wody. No to używasz obiektu "monter", który ten błąd usuwa. Jeden monter dla łazienki i całe osiedle jest obsłużone. A w przeciwnym razie wyobraź sobie, 100 łazienek i nagle 50 z nich zgłasza brak ciepłej wody. Wówczas jeden monter musi obsłużyć 50 zgłoszeń, a to trwa znacznie dłużej. Jeszcze gorszym rozwiązaniem byłoby to, że w każdym mieszkaniu jeden z jej mieszkańców sam obsługuje własna łazienkę i sam wykonuje rolą montera. Masz wiec stukrotne dublowanie funkcji należących do montera. Gdyby administrator osiedla zechciał zapoznać się z ogólnym stanem technicznym łazienek na osiedlu to w przypadku jednego montera osiedlowego ma od niego pełną informację, a w przypadku przeciwnym musi mozolnie zbierać te informacje od wszystkich mieszkańców.
Także obiektowość to jest takie rozbicie programu na czynniki pierwsze, czyli procedury, funkcje , że każda robi swoje i tylko to, co do niej należy, nie dublują swoich działań. Wszystkie zmienne wewnątrz nich powinny być lokalne, a funkcja zwraca na zewnątrz tylko wynik końcowy swojego działania. Im bardziej poszczególne funkcje są wyspecjalizowane, tym łatwiej jest je wykorzystywać wielokrotnie.
Przyszedł mi do głowy przykład z obrazami rastrowymi. Taki obraz składa się tylko z jednego rodzaju obiektów: z punktów. Właściwościami punktu są tylko jego kolor i lokalizacja. Jaka prostota: jeden obiekt typu punkt , a można z jego pomocą zbudować miliony obrazów, jaka ogromna oszczędność.
Gdyby zamiast punktu , tym atomowym obiektem dla obrazu rastrowego był odcinek, to można by go użyć go do znacznie mniejszej liczby obrazów. A z obiektów bardziej skomplikowanych , na przykład typu "Rysunek krzesła" najwyżej można sklecić obraz siedzeń z w sali kinowej.
Tak wiec pisząc program bardziej rozbudowany, po pewnym czasie dojrzewa się do tego, by wszystkie obiekty były jak najbardziej wyspecjalizowane, hermetyczne, by udostępniały tylko to co trzeba, by ich wewnętrzne zmienne nie były widoczne na zewnątrz, bo niepotrzebnie zajmują pamięć i przeszkadzają w debugowaniu, jest tych "widzianych na zewnątrz" za dużo i zdarza się, ze czasem dublują się ich nazwy. To rodzi błędy trudne do debugowania. Program napisany obiektowo staje się dla programisty znacznie prostszy w obsłudze, przejrzysty i krótszy.

_________________
Nie zadawaj bezcelowych pytań / Windows 8.1 / Windows 10 / VB2008 / VB 2010 / VB 2012 / Pisz poprawnie
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Wyślij email
R



Dołączył: 06 Sty 2016
Posty: 24

PostWysłany: Pią Sty 08, 2016 11:01 pm  OP    Temat postu: Odpowiedz z cytatem Pisownia

Samolot, ale się uśmiałem jak to czytałem ! Post miesiąca. Powinieneś pisać książki (a może już to zrobiłeś? :D)

ok, a przy programowanieu strukturalnym nie dba się o to by ine udostepniac zmiennych na zewnatrz funcji i nei dba sie o to by funkcje były hermetyczne i wyspecjalizowane ?


czy dobrze rozumiem ze mozna by powiedziec ze
w strukturalnym:
człowiek bierze prysznic i potem cżłowiek czyta gazete w wc

w obiektowym:
łazienka daje prysznic człowiekowi i potem wc pozwala czytać gazete człowiekowi

?

_________________
kodzę w R
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
samolot



Dołączył: 26 Sty 2006
Posty: 8008
Skąd: Toruń

PostWysłany: Sob Sty 09, 2016 12:06 am      Temat postu: Odpowiedz z cytatem Pisownia

Wiesz, ja jestem programista samoukiem, wydaje mi się, że bardziej rozumiem obiektowość niż strukturalność.
Z historycznego punktu widzenia obiektowość jest pojęciem późniejszym i wynika jakby z udoskonalenia kodu strukturalnego. Twój przykład z czytaniem w WC jest o tyle trafiony, że idziesz do WC , a tam masz co prawda wszystkie funkcje rozdzielone czyli osobno muszla i osobno "kącik czytelnika". Niektórzy tylko korzystają z WC i wychodzą, niektórzy korzystają z muszli czytając jednocześnie. Jest dowolność co kto tam robi. To, że w WC jest czytelnia to jest wyłącznie wynikiem tego, że wiele ludzi lubi sobie poczytać w WC przy okazji, wiec jeśli urządzają sobie toaletę to trzymają tam też gazety do czytania, "bo zwykle się tam przy okazji czyta". Tylko ,że czasem zdarzyć się może, że nieobeznany użytkownik wejdzie do WC a tam napotka na możliwość także czytania, no i zacznie czytać, a zapomni że miał skorzystać tylko z muszli. Albo przez pomyłką będzie chciał załatwić swą potrzebę na gazetniku a muszle zechce poczytać. Ze strukturalnego punktu widzenia cale to WC jest urządzone niby dobrze, bo jednym rogu są urządzenia WC ,a w przeciwnym rogu stoi gazetnik. Tylko, że to grozi tym, że mało kumaty gość pomyli funkcje urządzeń, albo kolejność. WC ma wyraźną strukturę, bo tu jest tu to a tam tamto, pogrupowane, niby trudno się pomylić, ale pomyłki się zdarzają, bo ludzie się mylą czasami dlatego, że maja do dyspozycji więcej niż jedna możliwość działania. Można to poprawić robiąc osobne obiekty, przeznaczone każde tylko do swej specyficznej funkcji. Z jednymi tyko drzwiami; do wchodzenia i wychodzenia. Gdyby nie daj Boze, w WC były na przeciwko drugie drzwi, tu użytkownik WC, gdy się zaczyta na amen, ta zamiast wrócić do przedpokoju, wyjdzie niechcący na klatkę schodowa. Potrzeba jest wiec większa obiektowość i większa hermetyzacja, by każdy obiekt był przeznaczony tylko do spełniania jednej funkcji i był na tyle szczelny, by nie można go było na przykład opuścić w niekontrolowany sposób.

_________________
Nie zadawaj bezcelowych pytań / Windows 8.1 / Windows 10 / VB2008 / VB 2010 / VB 2012 / Pisz poprawnie
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Wyślij email
marcin_an
Site Admin


Dołączył: 26 Maj 2005
Posty: 18736

PostWysłany: Sob Sty 09, 2016 1:19 am      Temat postu: Odpowiedz z cytatem Pisownia

R:
Weź na warsztat ten nieszczęsny kalkulator. Wyobraź sobie, że masz napisać takie narzędzie, działające w systemie dwójkowym, dla liczb nieujemnych. Czyli użytkownik wpisuje liczbę złożoną z cyfr '0' i '1' o dowolnej* długości, a następnie może albo wykonać na niej operację. Być może będzie musiał potem wpisać kolejną liczbę, jeśli operacja wymaga drugiego argumentu. Operacje jednoargumentowe: negacja bitowa (NOT), pierwiastek kwadratowy, przesunięcie o jedno miejsce w prawo/lewo z/bez zawinięcia, operacja "=" (nie robi nic, jeśli nie jest wybrana operacja dwuargumentowa, w przeciwnym przypadku wykonuje ją). Operacje te biorą aktualną wartość, przetwarzają ją i ustawiają wynik jako nową aktualną wartość. Operacje dwuargumentowe: AND/OR/XOR bitowy, suma, różnica, mnożenie, dzielenie, modulo. Operacje dwuargumentowe biorą aktualną wartość, zapamiętują ją, zapisują jaka operacja jest wybrana i pozwalają wprowadzić kolejną. Zatwierdzenie "=" powoduje wykonanie danej operacji dwuargumentowej.

Co masz zrobić:
  1. Jakieś szkice tego, jak sobie wyobrażasze działanie programu. Szkice = bierzemy kartkę i coś do pisania. Jeśli nie masz skanera, to zapewne masz chociaż najprostszy aparat foto w komórce. Alternatywnie możesz użyć jakiegoś programu do robienie UI (np. designera do Swinga w NetBeans**, edytora wxWidgets lub QtCreatora, ...), czegoś do grafiki wektorowej, nawet LibreOffice Draw czy MSPainta. Ale z mojego doświadczenia wynika, że papier i pisadło (lub tablica i flamaster/kreda przy pracy grupowej) są nieporównywalnie wygodniejsze. Na forum masz miejsce na załączniki. Tylko ekhem... nie przegnij z rozmiarem. Nie to, żeby nas brak miejsca bolał, ale nie ma sensu zapychać sieci bezużytecznymi obrazkami - a walnięcie 20-megapikselowego zdjęcia z aparatu mogącego de facto wyciągnąć 5Mpx, a przedstawiającego obraz czytelny nawet na 800x600 to jest marnowanie zasobów ;).
  2. Spis tego, co aktor, będący użytkownikiem programu, może wykonać - czyli listę przypadków użycia (ang. use case).
Uwzględnij:
  1. Co możę pójść nie tak?
  2. Gdzie są jakieś szczególne przypadki?
Sprawdź - w wyobraźni (lub na papierze) - czy wybrany przez ciebie sposób działania faktycznie ma szansę zadziałać. Czyli jeśli wyobrażasz sobie, że naciśnięcie przycisku "0" lub "1" powoduje dołączenie kolejnej cyfry do aktualnego zapisu liczby, to czy wykonanie takiej sekwencji operacji daje pożądany wynik np. jeśli aktualny zapis jest równy "0". Przez "uwzględnij" i "sprawdź" należy rozumieć porządne przemyślenie sprawy, więc odpowiedzi oczekuję nie wcześniej niż w następnym tygodniu. Inaczej trudno będzie uznać ją za przemyślaną - szczególnie, że poza samorozwojem w kodzeniu masz zapewne i inne zajęcia.

Tak, w powyższym nie ma słowa o programowaniu albo dotykaniu języka programowania. Nie bez powodu. Do tworzenia oprogramowania komputer jest potrzebny tylko w końcowej fazie.
____
* Ograniczonej dostępną pamięcią, oczywiście.
** Tworzy syfiasty kod z mojego punktu widzenia syfiasty i bezużyteczny, a na dłuższą metę jest upierdliwy, ale nadaje się do szybkich szkiców i prototypowania.
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
Wyświetl posty z ostatnich:   
Odpowiedz do tematu    Forum Coders' city Strona Główna -> Java Wszystkie czasy w strefie CET (Europa)
Idź do strony 1, 2  Następny
Strona 1 z 2

 
Skocz do:  
Możesz pisać nowe tematy
Możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Możesz dodawać załączniki na tym forum
Możesz pobierać pliki z tego forum




Debug: strone wygenerowano w 0.05383 sekund, zapytan = 11
contact

| Darmowe programy i porady Jelcyna | Tansze zakupy w Helionie | MS Office Blog |