Strona 1 z 3 123 OstatniOstatni
Pokaż wyniki 1 do 10 z 23

Temat: Część pierwsza - pojęcie obiekt i klasa

  1. #1
    Avatar javaman
    javaman jest offline www.javainside.pl
    Zarejestrowany
    Mar 2008
    Skąd
    no przed monitorem przecież...
    Postów
    474

    Domyślnie Część pierwsza - pojęcie obiekt i klasa

    Java jest językiem całkowicie obiektowym, w odróżnieniu od np. C++ (zorientowanym obiektowo) w javie wszystko jest obiektem. Czym jednak jest te n obiekt? Aby to wyjaśnić posłużę się porównaniem do codziennych przedmiotów.
    Obiekt ma cechy i zachowania. Weźmy np... budzik:
    1. To, że jest kwadratowy
    2. waży 0,2kg. (to zależy )
    3. ma jakiś kolor.
    4. składa się z plastiku, metalu, krzemu, i Bóg raczy wiedzieć z czego jeszcze
    to są jego cechy - właściwości

    Jego zachowania
    1. Cyka
    2. wyje właśnie wtedy kiedy nam się śni coś przyjemnego
    3. czasem się psuje

    może też mieć swój stan:
    1. Działa
    2. Nie działa
    3. ew. leży w kawałkach, bo kiedyś nie wytrzymaliśmy (chociaz wtedy zazwyczaj też nie działa, chyba że jest ruski)

    Podobnie jest to zorganizowane w javie.
    powiedzmy, piszemy grę - taki symulator jazdy samochodem. Mamy samochód, jest on właśnie takim obiektem. I teraz silnik naszej gry musi to obsłużyć. Tworzy więc samochód, daje mu wstępnie kolor czerwony, stan zbiornika z paliwem ustawia na 30 litrów, aktualną prędkość 0 km/h. I to jest stan początkowy taki który mamy w momencie kiedy taki obiekt jak samochód pojawia się w grze.
    Teraz musimy sprawić by coś się działo:
    samochód powinien jeździć, jego stan będzie się zmieniał. Niektóre cechy są stałe - jak np. kolor czerwony, inne - stan baku, prędkość będziemy modyfikować. Wydawać by się mogło - banalne. Gdybysmy na to spojrzeli z perspektywy pisania w jakimś języku strukturalnym jak np. pascal. Piszemy jakiś scenariusz, samochód jedzie, zwalnia, przyspiesza, zmieniamy wartość zmiennych, wywołujemy procedury które zmieniają stan pojazdu. I sprawa jest prosta dopuki w grze nie pojawi się drugi samochód, albo 5, albo 25.... Bawmy się teraz w tablicowanie, jakieś cuda na kiju, każdy kolejny samochód to zwielokrotnienie kodu.I oto jest na to magiczna receptura - właśnie obiekty!. mamy samochód1, samochód2, samochód3 itd. chcemy zwiększyć prędkość pierwszego samochodu, nie ma sprawy:
    samochod1.zwieksz_predkosc(10). Wywołujemy więc akcję na rzecz obiektu. Wygląda to mniej więcej tak: mamy obiekt samochód, mamy metodę (w javie funkcje nazywamy właśnie metodami) zwieksz_predkosc która powoduje zmianę prędkości, i mamy parametr 10 - zwiększamy prędkość o 10km/h.
    A czym jest klasa? Można powiedzieć, że klasa jest matrycą od której tworzymy obiekty. Mamy klasę samochod. wiemy że samochod ma jakis kolor, pojemnosc silnika, markę, maksymalną prędkość. Są to elementy wspólne wszystkich obiektów "samochod". Klasa jest nieco podobna do struktur w językach takich jak np. C czy php (w takich z tego co widzę przeważnie piszecie). Różnią się tym, że posiadają też metody które możecie wywoływać na rzecz samego obiektu utworzonego na podstawie tej klasy. Do tworzenia obiektów służy tak zwany Kontruktor. Używamy konstruktora i powołujemy więc do życia 10 samochodów. Mamy więc 10 takich samych bytów którymi możemy dowolnie manipulować. Konstuktor może tworząc obiekt klasy np. samochod moze nadaj jego cechom (w javie polom) określone wartości domyślne - może, ale nie musi. Konstruktor także jest metodą, możemy w niej zapisać działania jakie tylko chcemy. wartości pól moga pozostać puste. Mając te 10 samochodów nadajemy im jakieś parametry, pierwszy niech będzie Ferrari, drugi Maccerati, trzeci Porsche etc. nadajemy im prędkości- wszystkim po zero. nadajemy im stan baku.
    Robimy więc tak:
    samochod1.marka="Ferrari";
    samochod2.marka="Maccerati";
    ...
    ######To co piszę to jeszcze nie kod javy, na razie chcę przedstawić w jaki sposób to działa. ######

    Ich prędkość to dla wszystkich 0, może więc nadawać tą wartość od razu przy tworzeniu obiektów?
    wewnątrz konstruktora piszemy więc mniej więcej coś takiego:
    predkosc=0;
    I piszemy ten kod tylko raz... przy każdym tworzeniu nowego obiektu ta wartość będzie przypisywana domyślnie ( dzięki temu działaniu w konstruktorze ) możemy nadać tak samo stan baku.
    Zaczynamy więc wyścigi.
    Samochod samochod1=new Samochod();
    Samochod samochod2=new Samochod();
    Samochod samochod3=new Samochod();
    etc.
    ### to już Java. na razie tylko urywki - nie pytajcie co to znaczy, będzie o tym niedługo, na razie przyjmijcie, że stworzyliśmy samochody. Samochody mają już ustaloną prędkość, stan paliwa. Nadajemy im marki

    samochod1.marka="Ferrari";
    samochod2.marka="Maccerati";
    .....

    rozpędzamy:
    samochod1.predkosc=30;
    samochod2.predkosc=40;
    samochod3.predkosc=20;
    ...

    Jak to będzie wyglądać w kodzie, napiszę w następnym rozdziale. Omówimy dokładnie każdy element, w czasie trwania tego kursu napiszemy z resztą taką właśnie grę, sieciową i opartą na wątkach, z obsługą bazy danych.
    To tyle słowem wstępu. Mam nadzieję, że pomoże Wam to zrozumieć czym jest obiekt, klasa jak to fukcjonuje. Na "lesson2" zaczniemy pisać prawdziwy kod. Wyobraźcie sobie teraz ile kodu musielibyście naklepać pisząc to samo w języku strukturalnym.
    Pozdrawiam
    Javaman.
    Ostatnio edytowane przez javaman : 03-30-2008 - 01:15

  2. #2
    Avatar Nikow
    Nikow jest offline -=[ZRP]=-
    Zarejestrowany
    Sep 2007
    Skąd
    Różne zakątki sieci.
    Postów
    995

    Domyślnie

    Przeczytałem! I mam parę uwag:

    Zapomniałeś o wskaźnikach w C, które dają Ci pewne uczucie tych pięknych obiektów. Tzn. mamy funkcję abc która ma operować na jakieśtam strukturze. Struktura+zbiór funkcji to klasa. Tylko że pierwszy parametr funkcji niewidocznie pokazuje na tę strukturę która go wywołuje. Więc tutaj nie widzę żadnej magii... Ponad to java jest dużo cięższa i wolniejsza od C.

    1:0 dla C

    W Pythonie też mam obiekty i nie muszę cały czas na nich operować. Pracuje na nich kiedy chcę, w javie muszę na nich pracować. Nie lubię przymusu. Ponad to java wymaga więcej RAM'u od Pythona. Magią by było gdyby ten sam kod działał na komórce i na PC, ale tak nie jest.

    1:0 dla Pythona
    Ostatnio edytowane przez Nikow : 03-30-2008 - 08:32
    http://nikowek.blogspot.com/
    Zbrojne Ramię Pingwina!
    -----BEGIN GEEK CODE BLOCK-----
    Version: 3.12
    GCS d- s++:++ a--- C+++ UL+++ P L+++ E--- W++ N++ o K- w--
    O M- V- PS PE Y PGP++ t+ 5 X+ R tv- b++ DI- D-
    G+ e- h! r% y?
    ------END GEEK CODE BLOCK------

  3. #3
    Zarejestrowany
    Mar 2008
    Postów
    6

    Domyślnie

    W C są męczące wskaźniki o ktorych trzeba pamiętach, zastanawiać się czy postawić *, &, ** czy może już ***, bo ostatnio i taki kod w c widziałam, a przekazać chciałam tablice struktur: struct aiocb (Do asynchronicznych operacji). W javie obiekty przekazywane są przez referencje i wszystko jest dużo bardziej intuicyjne. Nie wydaje mi się, że za to można przyznać 1:0 dla C Raczej 1:0 dla javy:P

    Pythona nie znam, wiec nie moge nic na ten temat powiedzieć.

    Wiem jednak, że jesli chodzi o to, czy ten sam kod działa na komórce i na PC, to moge powiedzieć, że różnice są naprawde niewielkie. Różna jest tylko obsługa zdarzeń związana z tym, że są to całkowicie inne urządzenia. Mi przerobienie kodu tetrisa nawet nie z javy, a z C++ na kod javy, który by działał na komórce zajęło kilka godzin.

  4. #4
    Zarejestrowany
    Mar 2008
    Postów
    6

    Domyślnie Szybkość

    Zapomniałam o jeszcze jednej rzeczy, którą poruszyłeś.
    To prawda, że java nie jest tak szybka jak C i kod w javie nie będzie tak krótki jak w C. Nawet kod napisany w C++ będzie prawdopodobnie dłuższy od tego w C.
    Myślę jednak, że przy dzisiejszych parametrach komputerów szybkość i rozmiar programu mają coraz mniejsze znaczenie, jeśli w zamian można usprawnić proces programowania. Java zabezpiecza przed często nieumyślnymi błędami wynikającymi z niewiedzy programisty, ze złego zrozumienia jakiegoś tematu, a to chyba ważniejsze niż to, czy program wykona się troche szybciej. Jeśli wykonujemy czasochłonne obliczenia, przecież zawsze można dołączyć bibliotekę, napisaną w C.

  5. #5
    Avatar Nikow
    Nikow jest offline -=[ZRP]=-
    Zarejestrowany
    Sep 2007
    Skąd
    Różne zakątki sieci.
    Postów
    995

    Domyślnie

    Nie pisz posta pod swoim postem, to nie ładnie, lepiej edytować poprzedni post i dodać to, czego się zapomniało.

    Nie zamierzam tutaj prowadzić dyskusji nad wyższością jednego języka nad drugim. Jeśli mamy młotek, każdy problem widzimy jako gwóźdź. Istotnie Java ma swoje zalety, ale i ma swoje wady, których javaman nie poruszył i mówi źle o innych językach. Zamierzam bronić te, które znam. Założyłem że javaman zna tylko język Java. Z pierwszego posta tego wątku, można wywnioskować że inne języki nie mają funkcji, co jest oczywiście błędem, ponieważ nawet sam procesor ma wbudowane coś ala funkcje (mnemonik tego to call).

    Jeśli już mowa o komórkach i pecetach, to będą tutaj omówione tylko komórki czy tylko PC? A może będziecie tak mili i omówicie oba zagadnienia?

    Pozwolę sobie uściślić twoją wypowiedź dotyczącą długości kodu. Kod źródłowy będzie najprawdopodobniej krótszy i to o wiele, a obiekty są świetne, gdy pracujemy w zespole i każdy zajmuje się inną częścią programu. Z długością kodu wykonywalnego jest różnie, trzeba pamiętać że zapis bytecode może być krótszy od zapisu kodu maszynowego, ale bytecode musi być interpreterowany (wykonywany przez inny program), którego kod tutaj się liczy. Niektórzy tutaj rzucają bez zastanowienia, że kod normalnego programu napisanego w C też musi być wspierany przez system operacyjny, jest to prawda, ale interpretery (programy wykonujące kod pośredni), też są od niego zależne.

    Nie odbiegając od javy, znacie jakiegoś klienta IRC na komórkę? Dokładniej szukałbym czegoś na Nokie 3220 z oprogramowaniem w V 03.60 (z 01-10-2004) RH-37.
    http://nikowek.blogspot.com/
    Zbrojne Ramię Pingwina!
    -----BEGIN GEEK CODE BLOCK-----
    Version: 3.12
    GCS d- s++:++ a--- C+++ UL+++ P L+++ E--- W++ N++ o K- w--
    O M- V- PS PE Y PGP++ t+ 5 X+ R tv- b++ DI- D-
    G+ e- h! r% y?
    ------END GEEK CODE BLOCK------

  6. #6
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    Hehe - ja bede ciezkim zawodnikiem dla Was cos mi sie wydaje... jak mnie przekonoac po tylyu latach pisania w Perlu? Mam szybkosc obliczen, nie widzialem nigdzie BO jeszcze w programie perlowym, moge dolaczyc kod C/Java/asm/cokolwiek nawet na zasadzie 'inline' do mojego kodu itd...

    Zobaczymy dalej, mam swoje zdanie - na razie nie komentuje, czekam na logiczne argumenty a nie kolejna swieta wojne ktory jezyk lepszy.

    Zawsze dobierajmy narzedzie do problemu a nie naginajmy problem aby do jego rozwiazania zastosowac konkretna technologie... i to dziala w obie strony w przypadku Javy - na plus i na minus
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  7. #7
    Avatar hedVB
    hedVB jest offline AI
    Zarejestrowany
    Nov 2007
    Postów
    874

    Domyślnie

    Pragnę zwrócić uwagę że to miał być kurs - a nie debata który język lepszy, ja niestety jeszcze nie przeczytałem bo czas mi na to nie pozwala (przygotowania do matury ) -ale jak tylko przeczytam to się wypowiem
    www.lingubot.pl - projekt sztucznej inteligencji.

  8. #8
    Zarejestrowany
    Mar 2008
    Postów
    6

    Domyślnie

    Nie bede juz pisać postów pod postem to było tak na szybko i dlatego, że to moje pierwsze wypowiedzi na pierwszym w zyciu forum Wiec wybaczcie.

    Umówmy się, że nie będziemy dyskutować nad wyższościa jednego języka nad drugim, bo nie takie było założenie tego kursu. Wiem, że java jest cięzka i sama wole pisać w C# (mimo, że wiem ile ma wad ) ale warto ją znać chociażby dlatego, że podobno w javie pisze najwięcej programistów na świecie.

    Cytat Napisał Nikow Zobacz post
    Jeśli już mowa o komórkach i pecetach, to będą tutaj omówione tylko komórki czy tylko PC? A może będziecie tak mili i omówicie oba zagadnienia?
    Jeśli chcecie, żebyśmy napisali coś o programowaniu na komórki, to nie ma sprawy. Właściwie to o czym będziemy pisać zależy od Was i miło by było, gdybyście zgłaszali o czy chcecie przeczytać.

    Cytat Napisał Nikow Zobacz post
    Pozwolę sobie uściślić twoją wypowiedź dotyczącą długości kodu. Kod źródłowy będzie najprawdopodobniej krótszy i to o wiele
    Ciężko powiedzieć, czy będzie krótszy, czy dłuższy. Pewien czas temu moi znajomi z uczelni się zdenerwowali, że musimy pisać w C w linuksie. Mieli wtedy możliwość przepisać program na dowolny język obiektowy. Nikomu nie udało się napisać kodu krótszego niż ten w C.

    Swoją drogą javaman zna inne języki i wie, że są w nich funkcje
    Ostatnio edytowane przez DarkLady : 03-30-2008 - 14:29

  9. #9
    Avatar javaman
    javaman jest offline www.javainside.pl
    Zarejestrowany
    Mar 2008
    Skąd
    no przed monitorem przecież...
    Postów
    474

    Domyślnie

    ok.
    1. Nikow:
    wiem o tym, że java jest wolniejsza od niektórych języków. Jest to jedna z jej wad. Uściślę: java jest wolniejsza (choć nie zawsze) od innych języków to fakt.Prawdą jest też, że musisz tam operować na obiektach, choć masz też cos takiego jak main, główną metodę klasy, ale nie musisz do niej podchodzić tak, jakbyś używał obiektu. Wiem że zamotałem wyjaśnię przy okazzji omawiania maina. Częściowo odpowiedziała też DarkLady.
    2. Gdzie powiedziałem że w innych językach nie ma funkcji? powiedziałem, że w javie funkcje nazywamy metodami. Co do innych języków które znam (żeby nie było że znam tylko javę) :
    zaczynałem przeszło 10 lat temu od Basica na commodorcu,później był pascal na 486 (oj kochałem ten komputerek ), Delphi i assembler - przy użyciu których napisałem naprawdę spore dla projekty dla firm w których pracowałem. Przerobiłem też C, ale jakoś mi nie podszedł. Więc przesiadłem się na C++, przy którym pozostałem parę lat. Miałem również przyjemność z PHP jakiś czas, języki skryptowe też nie są mmi obce.. Pisałem też w VisualBasicu (.Net i bez .Net) oraz w C# - projekty komercyjne, żeby nie było że jakieś domowo-garażowe produkcje. Znam też język PL/SQL - taki język dla baz Oracle - mam z resztą z tego certyfikat wydany przez Oracla.
    3. Co do pracy zespołowej i obiektów to się zgodzę, wiele to ułatwia. Np. w pracy piszemy projekty, gdzie 1000 klas (uwzględniając kontrollery,dao,serwisy i inne duperszmity) to naprawdę mało, ale jakoś nie wyobrażam sobie pisać takiego projektu zespołowo np. w C.
    4. O programowaniu innych urządzeń - jak komórki też będziemy pisać, jedna zasadnicza sprawa: Int w javie, niezależnie od architektury urządzenia zawsze będzie miał 32 bity. Czy (Nikow) możesz to samo powiedzieć o C? W javie dba o to JVM właśnie, i sprawia ze programy w javie są dużo bardziej przenośne.
    5. Nie mówię i nigdy nie powiem, że java jest cudem nad wisłą i inne języki się nie imają. Mówię że jest to technologia którą warto poznać, mająca swoje wady i zalety. Osobiście uważam że java jest przede wszystkim bardzo przydatna.
    6. Nie chcę wywoływać świętej wojny kategorii windows vs. linux. Nie jestem tez slepym zwolennikiem javy który nie chce słuchać argumentów przeciw javie. Gdyby tak było, poszedłbym na bazar, kupił kolorowy szeleszczący dres i biegałbym po pociągach i ulicach sprayując "JAVA RULEZZZZ", a nie próbował kogokolwiek jej nauczyć.
    Uffff... starczy. TQM podziel się opinią...

  10. #10
    Avatar hedVB
    hedVB jest offline AI
    Zarejestrowany
    Nov 2007
    Postów
    874

    Domyślnie

    Przeczytałem Swoją drogą duuużo smaczków na Twoim ftp znalazłem
    www.lingubot.pl - projekt sztucznej inteligencji.

Strona 1 z 3 123 OstatniOstatni

Podobne wątki

  1. Odpowiedzi: 3
    Autor: 03-06-2008, 18:27
  2. Nasza-klasa
    By michalski007 in forum Hacking
    Odpowiedzi: 8
    Autor: 02-07-2008, 16:16
  3. Odpowiedzi: 4
    Autor: 01-31-2008, 18:34
  4. HELP wlam nasza-klasa
    By Marianski in forum /dev/null
    Odpowiedzi: 3
    Autor: 11-18-2007, 11:22

Zasady Postowania

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Subskrybuj