pytania na zaliczenie2

  1. Omówić znaczenie klas i obiektów? Jaka jest relacja pomiędzy klasą a obiektem?- Klasa – fizycznie zapisana forma określająca zachowanie (interfejs i implementacja) obiektów stworzonych na podstawie tej klasy, zawierająca metody i pola. Klasy mogą dziedziczyć po sobie, w Javie jedna klasa może dziedziczyć po innej, zaś np. w C++ klasa może dziedziczyć po więcej niż jednej klasie.
    Obiekt – fizyczna forma klasy, jest ona zapisywana w pamięci i stanowi fragment zbioru danych i funkcji danego programu komputerowego. W Java wymaga zawsze stworzenia go przez konstruktor klasy, usuwanie odbywa się samoczynnie. Klasa a obiekt – klasa określa zachowanie obiektu, obiekt jest implementacja fizycznie zapisaną w pamięci komputera.

  2. Enkapsulacja – polega na hermetycznym zamknięciu klasy. Ideą jest tutaj brak dostępu do pól klasy z zewnątrz oraz do krytycznych z punktu widzenia klasy metod. Dostęp do pól może się odbywać poprzez metody publiczne. Np. dla pola protected int a, tworzy się metodę public int a() { return a; }

  3. Dziedziczenie – polega na przejmowaniu metod i pól publicznych oraz protected przez klasę która dziedziczy, po takim dziedziczeniu może używać odziedziczonych pól i metod jakby należały i były zapisane fizycznie w jej kodzie.

  4. Polimorfizm polega na tworzeniu klasy pierwotnej ( po której dziedziczą inne klasy) oraz klas dziedziczących po niej. Następnie są tworzone obiekty klas potomnych, zaś w kodzie programu zapisywane są (np. w tablicy ) na wskaźniku do klasy pierwotnej. Dzięki temu można operować wszystkimi obiektami potomnymi, za pomocą metod pierwotnych, a każdy obiekt użyje swojej implementacji tej metody ( o ile została ona nadpisana ).

  5. Abstrakcja w programowaniu obiektowym – polega na tworzeniu metod, które nie są zaimplementowane w kodzie klasy. Następnie klasy potomne po tej klasie muszą ją ( tą metodę/y ) zaimplementować. Abstrakcja często jest wykorzystywana aby zastosować Polimorfizm.

  6. Różnice między programowaniem obiektowym a strukturalnym/proceduralnym: istotnym elementem programowania obiektowego jest klasa, zaś proceduralnym funkcja/procedura, programowanie obiektowe opiera się o zasadę przenoszalności klas, każdą klasę lub grupę klas można przenosić z jednego kodu programu do drugiego i powinna się tak samo zachowywać, w programowaniu strukturalnym powinno się tworzyć funkcję bardziej sprecyzowane pod dany program, dlatego funkcje są rzadko przenoszone z jednego programu do drugiego, gdyż zwykle są bezużyteczne, ze względu na swoją odmienność i przystosowanie do konkretnego programu. Programowanie obiektowe jest mniej wymagające jeśli chodzi o znalezienie błędnego działania programu, ponadto nie opiera się na globalnych zmiennych, dzięki czemu jedna zmiana wartosci zmiennej jest szybko wykrywana, w przeciwieństwie do strukturalnego gdzie do okreslonej zmiennej odwołuje się kilka/kilkadziesiąt funkcji i należałoby je wszystkie sprawdzić aby rozwiązać problem złej wartości w programie.

  7. Typy danych języka JAVA : boolean – true/false , Boolean – klasa, true/false char – standard unicode, Characted, klasa opierajaca się o typ char, byte , Byte, short , Short, int , Integer, long, Long, float, Float, double, Double. Typem danych też staje się klasa.

  8. Zasady obliczenia wyrażeń w języku Java - pierw wykonywany jest najbardziej wewnętrzny nawias np. dla : o.metoda1(o.metoda2(o.metoda3())), pierw wykonany zostanie o.metoda3(), jej wynik posłuży metoda2, a wynik metoda2, będzie parametrem dla metoda1. Kolejność dla +,-,*,/, potęg i innych wyrażeń matematycznych jak w matematyce.

  9. Dlaczego nie ma struktur? - Java jako cała opiera się jedynie na klasach, struktury mogą być zastępowane przez klasy, więc są zbędnym określeniem bloku danych.

  10. Dlaczego nie ma typu wskażnikowego? - W java wszystko opiera się na wskażnikach, parametry metod przyjmują wskażniki, deklaruje się zmienne wskażnikowe, to wirtualna maszyna zajmuje się fizyczną stroną alokowania danych w pamięci. Należy w Java uważać aby w metodach nie zmieniać wartości parametrów, najlepiej jeśli parametr przyjeliśmy int, po prostu deklarować : int x = parametr_metody , wtedy nie zmieniamy wartości parametru i tworzymy kod powodujacy mniej problemów.

  11. Znaczenie zmiennych i merod statycznych. Pola statyczne – są tworzone jako jedne dla całej grupy obiektów zadeklarowanych na danej klasie, dlatego zmiana w jednym obiekcie metody statycznej w konstruktorze powoduje zmiane dla wszystkich obiektów. Pola statyczne zwykle służą do szybkiej zmiany ważnej stałej wartości w kodzie (np. określającej max stan tablicy w klasie ) lub aby lepiej zrozumieć kod, poprzez stosowanie nazw zamiast liczb. Metody statyczne służą do zwracania wartości które są stałe lub obliczeń które zawsze są wyliczane w ten sam sposób. Metody i pola statyczne mają przedrostek static.

  12. Omówić role konstruktora w klasach Konstruktor jest ważnym elementem klasy, w konstruktorze powinny być ustawione istotne dla poprawnego działania pola klasy, oraz można w nim uruchomić istotne w danym momencie metody tej klasy. Konstruktor zawsze istnieje w klasie w języku Java.

  13. Przeciążanie nazw, polega na tworzeniu metod o tej samej nazwie lecz o różnej liczbie parametrów, lub różnym typie parametrów. Maszyna wirtualna JAVA sama rozpozna na podstawie typów parametrów i ich ilości do której metody chcemy się odwołać.

  14. Metody inicjalizacji pól w obiektach :
    1 – domyślna, zmienne otrzymują zerowe wartości (boolean – false, typy klasowe – null ).
    2 – inicjalizacja w deklaracjach, obok zmiennej pojawia się jej startowa wartość np. protected int x=3;
    3 – w konstruktorze klasy, zmienne otrzymują wartości takie jakie ustawimy w konstruktorze klasy,
    4 – dostęp ogólny (nie powinno się stosować ) wartości pól są ustawiane z poziomu dostępu zewnętrznego.

  15. Omówić zasady inicjalizacji obiektów
    1 – poprzez konstruktor, tworzony właśnie obiekt jest tworzony na podstawie konstruktora,
    2 – poprzez inny obiekt, tworzony obiekt jest wierną kopią aktualnego stanu innego obiektu tej samej klasy,
    3 – poprzez przypisanie, obiekt jest wskaźnikiem na inny obiekt, zmiana w nim powoduje zmianę w obiekcie do którego otrzymaliśmy wskaźnik.

  16. This – jest wskaźnikiem na własną klasę, można go stosować kiedy chcemy zastosować pole klasy, a w danej metodzie mamy zmienną o tej samej nazwie. Np. public void x(z) { this.z = z; } gdzie z to pole klasy, możemy też stosować this jeśli konstruktor innej klasy potrzebuje obiektu omawianej klasy, a konstruktor ten jest wywoływany tej klasy. Innym zastosowaniem jest kiedy klasa dziedziczy po innej klasie i nadpisuje metodę, wtedy można wykorzystać this.nazwa_metody_nadpisanej() aby wywołać metodą nadpisaną, choć można też nie stosować w tym momencie this.

  17. Finalize() - destruktor klasy, celem jest ustawienie obiektów wewnątrz klasy, zamknięcie pliku z którego korzystała klasa lub też wypisanie czegoś na ekran.

  18. Do czego służą kwalifikatory dostępu? - Modyfikatory są to słowa kluczowe, określające prawo dostępu do elementu (zmiennej, procedury lub funkcji, ewentualnie klasy), który został zadeklarowany z ich użyciem.

  19. Znaczenie i zastosowanie kwalifikatora private - oznacza że element jest dostępny tylko wewnątrz modułu, lub klasy, lub struktury w której został zadeklarowany. Nie można go stosować wewnątrz procedur i funkcji (Zmienne deklarowane bez żadnego modyfikatora domyślnie są ustawione na Private)

  20. Znaczenie i zastosowanie kwalifikatora public - oznacza, że dostęp do elementu jest możliwy z każdego miejsca w projekcie, a nawet z innych projektów, które odwołują się do naszego. Można go używać tylko w kodzie klasy, lub modułu, ale nie wewnątrz procedur czy funkcji.

  21. Dostępność klas, pól i metod bez specyfikacji dostępu.

  22. Do czego służą pakiety – służą do organizacji, przechowywania klas

  23. Co jest dziedziczone z klasy bazowej - Klasy pochodne otrzymują wszystkie metody i atrybuty swoich klas bazowych

  24. Zastosowania dziedziczenia - Podstawowym zastosowaniem dziedziczenia jest ponowne wykorzystanie kodu. Jeśli dwie klasy wykonują podobne zadania, możemy utworzyć dla nich wspólną klasę bazową, do której przeniesiemy identyczne metody oraz atrybuty. Ułatwi to testowanie oraz potencjalnie zwiększy niezawodność aplikacji w przypadku zmian.

  25. Zasady inicjalizacji w podklasach i klasach bazowych

  26. Znaczenie i zastosowanie kwalifikatora protected - elementy dostępne są tylko albo z klas dziedziczących, albo wewnątrz tego samego projektu. Może być deklarowany tylko na poziomie klasy.

  27. Jakie warunki musi spełniać metoda aby mogła być metoda polimorficzna?

  28. Czy klasa abstrakcyjna może zawierać metody ostateczne - NIE

  29. Co może zawierać interfejs? – Metody abstrakcyjne, pola (muszą być public, static, final)

  30. Czy metody statyczne mogą być ostateczne, abstrakcyjne lub polimorficzne?

  31. Jakie konstrukcje (klasy, interfejsy, parametry metod, wartość zwracana przez metodę, pole klasy, zmienna lokalna, obiekt) mogą być sparametryzowane typem?

  32. Jakie są ograniczenia typów uogólnionych?

  33. Jaka jest różnica pomiędzy typami uogólnionymi a rzutowaniem?

  34. Do czego służy i w jakich kolekcjach występuje iterator? Służy do iterowania po listach, kolejkach i zbiorach

  35. Różnice pomiędzy zbiorem a lista.

  36. Jak przeglądać wszystkie elementy w mapie? - entrySet() – elementy, keySet() - klucze

  37. Konstruktor w podklasie może generować wyjątki:

  1. tylko takie jak w metodzie z klasy bazowej

  2. dodatkowo równie_ inne wyjątki

  3. i nie może obsługiwać wyjątków wyrzucanych przez konstruktor z klasy bazowej

  4. tylko wyjątki nie obsługiwane w klasie bazowej

  1. Metoda przeciążenia może generować wyjątki:

  1. tylko wyjątki nie obsługiwane w klasie bazowej

  2. tylko takie jak w metodzie z klasy bazowej

  3. dodatkowo równie_ inne wyjątki

  1. Zasady organizacji wejścia/wyjścia w języku Java.

  2. Zastosowania polimorfizmu w strumieniach we/wy.

  3. Na czym polega serializacja i deserializacja obiektów?

  4. Jakie warunki musi spełniać klasa aby możliwa była jej serializacja?

  5. Dla jakich obiektów serializacja nie ma sensu?

  6. Które zestawy metod są wystarczające w aplecie:

  1. start(), stop()

  2. run(), destroy()

  3. init(), stop() d) main()

  1. Layout Manager określa:

  1. wielkość komponentów rozmieszczonych w kontenerze

  2. sposób obsługi zdarzeń

  3. typ kontenera dla komponentów

  4. sposób rozmieszczania elementów w kontenerze

  1. Identyfikacja typu obiektu podczas wykonania jest niezbędna w:

  1. rzutowaniu w górę

  2. rzutowaniu w dół

  3. polimorfizmie

  4. dziedziczeniu

  1. Identyfikacja typu obiektu podczas wykonania jest możliwa dzięki:

  1. klasie Class

  2. klasie Object

  3. metodzie equals()

  4. operatorowi instanceof (chyba)


Wyszukiwarka