#00 – programowanie obiektowe

By 7 sierpnia 2014Kurs Javy
ProgramowanieObiektowe

Lekcja pierwsza będzie o podstawach programowania, czym jest Java, jak przygotować środowisko do programowania, a także poznamy kilka podstawowych pojęć.

Przed przejściem dalej warto przeczytać poniższe artykuły:

Lekcja

Java – obiektowy język programowania

Bardzo często można spotkać się z definicją, że Java jest obiektowym językiem programowania. Jest to bardzo ważne, ponieważ definiuje to sposób, w jaki pracujemy z językiem. To tzw. paradygmat programowania (zainteresowanych alternatywami lub zgłębieniem tego tematu odsyłam do wikipedii).

Programowanie obiektowe znaczy tyle, że w kodzie pracujemy na obiektach. Obiekty z kolei to odzwierciedlenie rzeczywistych rzeczy, uproszczenie zrozumiałe dla komputera. Gdybyśmy np. pisali aplikację służącą do zarządzania mieszkaniem, mielibyśmy obiekty np. Mieszkanie, Pokój, Pralka, Lodówka, Stół itp..

Weźmy na przykład Pralkę. Pralkę opisują pewne informacje – np. aktualnie wybrany program, to czy jest włączona czy nie, czy drzwiczki są otwarte czy nie itp. Każda z tych informacji może być przechowywana w osobnym polu. Pole to nic innego jak jedna informacja na temat stanu obiektu. Czyli polem będzie informacja, czy drzwi są otwarte, osobnym polem będzie informacja czy pralka jest włączona i jeszcze osobnym polem będzie informacja o aktualnie wybranym programie.

2
Jednocześnie możemy wykonać pewne czynności na pralce – np. włączyć ją, wyłączyć, zmienić program, otworzyć drzwi itp. Każda z tych czynności to tzw. metoda (często spotyka się też określenie operacja) obiektu.

Podsumowując:

  • obiekty to abstrakcyjne opisy rzeczywistych przedmiotów
  • pola obiektów to pojedyncze informacje o stanie tych obiektów
  • metody obiektów to czynności jakie możemy wykonać na danym obiekcie

O polach i metodach powiemy sobie więcej w kolejnej lekcji, gdzie będziemy to ćwiczyć już w Javie.

Klasa a obiekt – jaka jest różnica

W programowaniu obiektowym spotkamy się z dwoma podstawowymi określeniami – klasa oraz obiekt. Te pojęcia są ze sobą ściśle związane, ale bardzo istotne jest rozumieć różnicę między nimi.

Mówiąc językiem technicznym obiekt to instancja klasy. Klasa to w pewnym sensie szablon opisu – czyli informacja jakie są pola (jakie informacje można przechowywać) oraz metody (jakie czynności wykonywać). Obiekt z kolei to ‚konkretny przypadek’ – czyli klasa oraz konkretne informacje (wartości pól) które składają się na określony stan całego obiektu.

Aby zobrazować to przykładem – klasa to np. Człowiek. Wiemy o niej, że ma pola imię i nazwisko ale w przypadku klasy nie mówimy o wartościach tych pól – po prostu że takie pola są. Klasa to człowiek jako gatunek, istota. Obiekt z kolei to konkretny człowiek – taki, który posiada imię i nazwisko. Zawsze istnieje więc tylko jedna klasa danego typu, ale może istnieć wiele obiektów danej klasy.

3

 

O obiekcie mówimy że jest pewnego typu – typem obiektu jest klasa, którą obiekt reprezentuje. Np. obiekt Jan Kowalski jest typu Człowiek (w kategoriach programowania obiektowego).

Nazwy klas – pakiety

W Javie (jak i w wielu innych językach programowania) przewidziano tzw. przestrzenie nazw. Są one odpowiedzią na problem, że kilka klas może mieć takie same nazwy (np. Converter – klasa o takiej nazwie może występować w kilu miejscach aplikacji i mieć różne zastosowania). Aby wiadomo było o którą klasę dokładnie chodzi, w Javie funkcjonują tzw. pakiety. Pakiet to nic innego jak prefiks nazwy klasy który jednoznacznie ją wyróżnia. Nie mogą istnieć w jednej aplikacji dwie klasy o tej samej nazwie i tym samym pakiecie. Połączenie nazwy pakietu i nazwy klasy kropką w jeden ciąg znaków to tzw. nazwa kwalifikowana (qualified name). Przykładowo, klasa reprezentująca liczbę całkowitą w Javie ma nazwę Integer. Jej nazwa kwalifikowana to java.lang.Integer, a więc pakiet w którym się znajduje to java.lang .

Nazwy pakietów najczęściej tworzy się odwracając nazwę domeny – np. aplikacja pisana w ramach tego kursu będzie używała pakietów zaczynających się od pl.kobietydokodu.kurs . Więcej o pakietach i ich praktycznym zastosowaniu powiemy sobie w kolejnej lekcji.

Zadania

W tej lekcji nie będzie jeszcze zadania związanego z kodem. W ramach zadania odpowiedz własnymi słowami na poniższe pytania:

  1. Czym jest obiekt?
  2. Co posiada obiekt?
  3. Czym różni się metoda od pola?
  4. Wyjaśnij różnice i wzajemną zależność pomiędzy klasą a obiektem?
Jeżeli masz problem z zadaniem z lekcji i nie wiesz, jak go rozwiązać, to sprawdź, jak sobie radzić - przeczytaj o szukaniu rozwiązań problemów z kodem.

4

Licencja Creative Commons

Jeśli uważasz powyższą lekcję za przydatną, mamy małą prośbę: polub nasz fanpage. Dzięki temu będziesz zawsze na bieżąco z nowymi treściami na blogu ( i oczywiście, z nowymi częściami kursu Javy). Dzięki!

  • 174
  •  
  •  
  • 14
  •  
  • Kyrtap

    Czy pojęcie obiektu (klasy) i danych (struktury danych) są komplementarne?

    • Są na pewno zbliżone – dotyczą mniej więcej tego samego. Rożnica jest taka, że w przypadku klas, rozmawiamy nie tylko o klasach, które są reprezentacją obiektów rzeczywistych, ale też o klasach, które pełnią jakąś funkcję, np. przeprowadzają obliczenia czy pomagają zarządzać klasami-obiektami z rzeczywistości.
      Można więc powiedzieć, że obiekty/klasy to dane (struktura danych) oraz operacje, które możemy na tych danych wykonywać. Struktura danych z kolei określa tylko jakie informacje przechowujemy i jakiego typu. Czy to pomogło rozwiać Twoje wątpliwości ? :)

  • Cześć,

    częściowo z powyższym się zgadzam, ale uważam że pomija bardzo dużo. Pytanie co jest dla Ciebie celem: czy programować i zarabiać na tym ‚od razu’, czy zbudować kompetencje na lata i korzystać z tego za kilka lat.

    Odnosząc się do tych punktów: po pierwsze aplikacje webowe, to nie tylko aplikacje przeglądarkowe! Większość z nich nie ma nawet interfejsu użytkownika, a co dopiero wersji przeglądarkowej. Zwróć też uwagę, że poza prostymi aplikacjami mobilnymi typu kółko i krzyżyk, nawet proste gry na telefony komunikują się z serwerem (np. pobierając nowe dane, zapisując stan gry, zbierając dane do analizy itp).

    Po drugie, 20 lat to wieczność. Osoba, która ma 20 lat doświadczenia w branży, zaczynała w czasach C, Fortrana itp, jej doświadczenie jest bardzo cenne w niektórych obszarach, a w innych (jak np. nowoczesna Java, JPA itp) nie różni się od doświadczenia osób z 3-4 letnim stażem. Technika idzie naprzód i mając ok. 5-6 lat doświadczenia w danej technologii wiesz mniej więcej tyle samo co osoba z 20-letnim doświadczeniem. Reszta to kruczki, rozwiązania specyficzne do sytuacji i doświadczenia zerbane w pracy z konkretnym produktem czy technologią. Takie osoby są niezbędne żeby projekt się udał, ale nie konkurujesz z nimi na stanowisko programisty.

    Po trzecie jasne, każdy może napisać aplikację mobilną i to jest super. Zapotrzebowanie jest faktycznie ogromne. Ale technologia mobilna zmienia się jeszcze szybciej niż technologia ogółem. Kto 10 lat temu korzystał z Androida? Kto za 10 lat będzie z niego korzystał? Jeśli zmieni się technologia, to będziesz w tej samej sytuacji, co dzisiaj – ale już nie z poziomu osoby bez doświadczenia, która cieszy się, że inni nie mają przewagi w tym zakresie, ale z poziomu osoby z doświadczeniem, która ma problem bo jej doświadczenie nie jest potrzebne i istotne na rynku.

    Po czwarte, i chyba najistotniejsze – pytanie o kierunek rozwoju. Aplikacje mobilne to w gruncie rzeczy interfejsy użytkownika. Jasne, mają jakąś logikę biznesową, ale prawdziwa wartość jest w łączeniu danych z wielu źródeł (np. z milionów użytkowników jakiejś aplikacji mobilnej) i wyciąganiu wniosków na ich podstawie. W tym sensie aplikacje na Androida / iOS niewiele się różnią od stron HTML / Angular.JS. Docelowo aplikacje mobilne będą coraz bardziej i bardziej zadaniem dla ‚frontendowców’. Co jest też super drogą, o ile jesteś świadomy, że właśnie nią chcesz iść.

    Po ostatnie: ani Apple, ani Android nie wygraja konkurencji na rynku, wygra technologia, która pozwoli robić to w jeden sposób (kandydatów jest wielu: https://www.google.pl/search?q=android+ios+applications&oq=android+ios+applications ).

    • Dzięki za tak obszerną odpowiedź. :-)

      Zatem jakie widzisz alternatywne zakończenie zdania „Gdybym dziś miał się zacząć uczyć programowania, to ..” dla osoby 40+?

      • … to zależy ;)
        Aplikacje mobilne faktycznie prawdopodobnie pozwolą zarobić więcej w krótkim terminie. Podejrzewam, że łatwiej też o zlecenia freelancerskie w tym zakresie (choć miej świadomość, że wtedy konkurujesz także z osobami z krajów, w których koszty życia są niższe i ich stawki również niższe.
        Java ‚serwerowa’ to bardziej inwestycja długoterminowa – kompetencje w tym zakresie wolniej się dezaktualizują i bardziej liczą się lata doświadczenia. Choć faktycznie najprawdopodobniej będziesz musiał przejść ścieżkę kariery od początku, tzn. od juniora.
        Nie potrafię dać Ci jednoznacznej odpowiedzi – każda ma swoje wady i zalety i sam, najlepiej znając sytuację, musisz podjąć decyzję.

        • Oh, well, decyzja jeszcze daleko przede mną. Póki co trzeba wrócić do nauki podstaw. :-)

  • Konrad Wróbel

    Ile trzeba poświęcić czasu aby móc rozpocząć pracę jako programista ? Czy trzeba umieć bardzo dobrze matematykę aby się programowania nauczyć ?

    • To bardzo zależy – każdy uczy się w innym tempie, są różne technologie, których można się uczyć, pytanie też, czy będziesz jednocześnie się uczył/pracował, czy też w całości poświęcisz nauce. Zależy też, na jakim poziomie chciałbyś rozpocząć pracę – są firmy, które przyjmują osoby całkowicie ‚zielone’ na szkolenia i z nich wyławiają potencjalnych pracowników. Ogólnie w rok nauki raczej będziesz w stanie rozpocząć pracę jako Junior.

      Matematyka jako całość nie jest bardzo przydatna przy programowaniu – ale bardzo ważna jest umiejętność logicznego myślenia. Bez tego byłoby naprawdę ciężko.

      • Konrad Wróbel

        Dziękuje bardzo za odpowiedź.

        • To zależy oczywiście od firmy – nie jest to częsta praktyka, ponieważ niewiele osób w tym wieku ma wystarczające kompetencje do podjęcia pracy w firmie, istnieje też uzasadniona obawa, że taka praca będzie kolidowała z nauką (w końcu ciężko o ‚zdalne’ praktyki czy tylko weekendowe – wtedy to bardziej freelancing niż prakyki) – stąd raczej ciężko będzie takie znaleźć, co nie znaczy że jest to niemożliwe (szczególnie w okresie wakacji – wtedy spokojnie możesz aplikować na zwykłe programy stażowe i praktyki)

  • Jan B. Beyondthereality

    Ekstra kurs. Co prawda nie jestem kobietą ale zostanę z wami na razie :)

  • Krystian Jurdziński

    Od jakiegoś czasu pracuję w branży IT jako project manager jednak niedawno zacząłem poważnie myśleć o nauce programowania. Interesuje mnie programowanie na Androida/iOS’a. W firmie, w której pracuję nie pracujemy właściwie z aplikacjami mobilnymi więc nie moge sprawdzić jak to wygląda od kuchni, ani podpytać o szczegóły. Czy mogłabyś mi (jako osobie, która nie programuje/koduje ale ma styczność z tym na co dzień) powiedzieć od czego zacząć, jakie podstawy wiedzy zdobyć, aby potem móc samodzielnie programować aplikacje mobilne? Może będzie mi to potrzebne w mojej firmie w przyszłości, może nie będzie. Zależy mi na tym, żeby móc się samodzielnie rozwijać w tej branży. Od czego zaczać, aby konkretnie iść w kierunku programowania na mobile?

    • Programowanie na androida to Java, na iOS Swift. Naukę programowania warto jednak zacząć od zrozumienia podstaw. Tutaj polecam np. zrobienie kursu dla początkujących np. w Pythonie, albo stworzenie kilku aplikacji w appInventorze (webowe narzędzie do tworzenia aplikacji mobilnych, które przypomina układanie puzzli, ale pozwala na całkiem sporo). Dzięki temu dowiesz się co to pętla, instrukcje warunkowe itp, a także w jaki sposób podchodzi się do rozwiązywania prostych programistycznych problemów. Potem, no cóż przychodzi nauka już właściwego języka. Nie programujemy aplikacji mobilnych więc nie jesteśmy w stanie obiektywnie ocenić, co łatwiejsze, fajniejsze itp. Tu musisz już podpytać osób pracujących z technologiami mobilnymi – z naszej strony możemy powiedzieć, że Java na pewno nie gryzie :) O samej nauce znajdziesz sporo we wpisie: http://kobietydokodu.pl/faq-chce-zaczac-programowac/#comment-2319508621

  • Dan B

    Powiedzcie mi proszę na ile (do którego momentu) kurs na Waszym blogu będzie mi pomocny chcąc opanować programowanie aplikacji mobilnych (głównie Android)? Na blogu są lekcje ukierunkowane na aplikacje webowe i zastanawiam się w jakim stopniu materiały będą mi pomocne na drodze do Androida.

    • Do lekcji 7 na pewno warto poczytać – nie ma tam za wiele specyficznych dla aplikacji webowych rzeczy. Kolejne lekcje są bardziej o Springu, który niekoniecznie może Ci się przydać w aplikacji na Androida.

  • O321123

    Nic z tego nie rozumiem, nie da się tego wyjaśnić prościej?

  • O321123

    Poleci mi ktoś kurs dla początkujących, gdzie znajdę ładnie wyjaśnione czym jest klasa obiekt i gdzie stawiać klamry średniki i jak to wszystko jest zbudowane?
    Bo to:
    Obiekt to instancja klasy. Klasa to w pewnym sensie szablon opisu – czyli informacja jakie są pola oraz metody. Obiekt z kolei to ‚konkretny przypadek’ – czyli klasa oraz konkretne informacje które składają się na określony stan całego obiektu.
    No zupełnie nic mi to nie mówi.

    • W sekcji ‚więcej informacji’ znajdziesz link m.in. do kursu Oracle, gdzie opisane są podstawowe definicje takie jak obiekt czy klasa (http://docs.oracle.com/javase/tutorial/java/concepts/index.html) . Szerszy opis znajdziesz także np. na wikipedii ( https://en.wikipedia.org/wiki/Class_(computer_programming) ) – lub po prostu w google – http://bfy.tw/7JAB

      Ten kurs (podobnie jak każdy inny) nie da Ci ‚wszystkich’ informacji na tacy, także dlatego że każdy preferuje nieco inny sposób tłumaczenia i po prostu nie sposób stworzyć coś, co będzie idealne dla wszystkich. Z tego powodu pod każdą lekcją znajdziesz linki, gdzie można uzupełnić swoją wiedzę, warto do nich zajrzeć tak czy inaczej (często zwierają też rozszerzenie informacji zawartych w kursie).

      Powodzenia i trzymamy kciuki!

      • O321123

        Znalazłem rozwiązanie, jest to książka Java – Rusz głową. Jest tam wszystko napisane jak zbudowany jest język java.
        Na tej stronie wszystko jest podawane od środka, bez wyjaśnień.
        Więc jeśli ktoś nigdy nie programował, polecam książkę którą wymieniłem.

  • Agata

    Przydałby się odnośnik do kolejnego wpisu z cyklu przy wpisach (np. na końcu) – byłoby łatwiej przechodzić do kolejnej lekcji :)

  • Joanna Podolska

    nie działa już link do MIMUW?

    • Nam działa, może przejściowo coś nie było dostępne.

      • Joanna Podolska

        Faktycznie, już jest :)

  • Projekt „Przebranżowienie” – czas start!