Pytania pomocnicze - INF.04

Projektowanie, programowanie i testowanie aplikacji

Pytania pomocnicze rozwijające tematy z pytań egzaminacyjnych. Każde pytanie ma krótką odpowiedź, która pomaga utrwalić wiedzę i przygotować się do egzaminu. Łącznie: 3704.
Strona 43 z 50.

Na czym polega hermetyzacja w programowaniu obiektowym?

Hermetyzacja polega na ukrywaniu wewnętrznych danych klasy i kontrolowaniu dostępu do nich. Najczęściej realizuje się ją przez prywatne pola oraz publiczne metody.

Dlaczego pola klasy często oznacza się jako private?

Modyfikator `private` blokuje bezpośredni dostęp do pola spoza klasy. Dzięki temu można chronić dane przed niepoprawną zmianą.

Jaką rolę pełnią modyfikatory dostępu w hermetyzacji?

Modyfikatory dostępu określają, kto może korzystać z pól, metod lub klas. Pozwalają ograniczyć dostęp do szczegółów implementacji.

Czym hermetyzacja różni się od dziedziczenia?

Hermetyzacja dotyczy ukrywania danych i kontroli dostępu. Dziedziczenie polega na tworzeniu klasy potomnej na podstawie klasy nadrzędnej.

Czy klasa abstrakcyjna jest przykładem hermetyzacji?

Nie. Klasa abstrakcyjna jest związana głównie z abstrakcją i dziedziczeniem, a nie bezpośrednio z ograniczaniem dostępu do pól.

Po co stosuje się gettery i settery?

Gettery i settery umożliwiają kontrolowany odczyt i zapis pól prywatnych. Setter może dodatkowo sprawdzać poprawność przekazywanej wartości.

Jaki przykład kodu najlepiej pokazuje hermetyzację?

Przykładem jest klasa z polem `private` oraz metodami `public`, które umożliwiają bezpieczny dostęp do tego pola.

Na czym polega polimorfizm w programowaniu obiektowym?

Polimorfizm polega na tym, że ta sama metoda lub operacja może mieć różne działanie w zależności od typu obiektu, na którym została wywołana.

Dlaczego polimorfizm jest przydatny w projektowaniu aplikacji?

Pozwala pisać bardziej elastyczny kod, który działa z różnymi klasami przez wspólny interfejs lub klasę bazową. Dzięki temu łatwiej rozwijać program bez dużych zmian w istniejącym kodzie.

Jaki związek ma polimorfizm z dziedziczeniem?

Polimorfizm często wykorzystuje dziedziczenie: klasa potomna nadpisuje metodę klasy bazowej, a program wywołuje odpowiednią wersję metody zależnie od rzeczywistego typu obiektu.

Czym różni się polimorfizm od hermetyzacji?

Polimorfizm dotyczy różnego działania tej samej metody dla różnych obiektów. Hermetyzacja dotyczy ukrywania danych i kontrolowania dostępu do składników klasy.

Czym jest nadpisywanie metod w kontekście polimorfizmu?

Nadpisywanie metod oznacza zdefiniowanie w klasie potomnej własnej wersji metody odziedziczonej po klasie bazowej. Jest to typowy sposób realizacji polimorfizmu dynamicznego.

Czym różni się przeciążanie metod od nadpisywania metod?

Przeciążanie oznacza kilka metod o tej samej nazwie, ale różnych parametrach w tej samej klasie. Nadpisywanie oznacza zmianę działania metody odziedziczonej po klasie bazowej.

Jak rozpoznać w pytaniu egzaminacyjnym odpowiedź dotyczącą polimorfizmu?

Należy szukać sformułowań o jednej metodzie, która może działać na różne sposoby zależnie od klasy lub typu obiektu.

Na czym polega główna idea programowania obiektowego?

Główna idea OOP polega na modelowaniu problemu za pomocą klas i obiektów. Obiekty łączą dane oraz metody, które na tych danych operują.

Czym różni się klasa od obiektu?

Klasa jest szablonem opisującym cechy i zachowania. Obiekt jest konkretnym egzemplarzem utworzonym na podstawie klasy.

Dlaczego odpowiedź o funkcjach i procedurach nie opisuje programowania obiektowego?

Podział kodu na funkcje i procedury jest charakterystyczny głównie dla programowania proceduralnego. W OOP najważniejsze są klasy, obiekty i relacje między nimi.

Jakie są podstawowe filary programowania obiektowego?

Najczęściej wymienia się abstrakcję, hermetyzację, dziedziczenie i polimorfizm. Razem ułatwiają organizację, rozbudowę i utrzymanie kodu.

Na czym polega hermetyzacja w programowaniu obiektowym?

Hermetyzacja polega na ukrywaniu szczegółów wewnętrznych klasy i kontrolowaniu dostępu do danych, np. przez metody oraz modyfikatory dostępu.

Jak abstrakcja pomaga w tworzeniu programu?

Abstrakcja pozwala skupić się na najważniejszych cechach obiektu, pomijając szczegóły niepotrzebne w danym problemie. Dzięki temu model programu jest prostszy i czytelniejszy.

Dlaczego relacyjne bazy danych nie są zasadą programowania obiektowego?

Relacyjne bazy danych służą do przechowywania danych w tabelach. Mogą być używane w aplikacjach obiektowych, ale same nie definiują zasad OOP.

Czy algorytmy heurystyczne są podstawą programowania obiektowego?

Nie. Algorytmy heurystyczne dotyczą sposobu szukania przybliżonych rozwiązań problemów, a programowanie obiektowe dotyczy organizacji kodu za pomocą klas i obiektów.

Czym różni się atrybut klasy od metody klasy?

Atrybut przechowuje dane opisujące stan obiektu, np. imię lub wiek. Metoda wykonuje operacje, np. zmienia wartość atrybutu albo oblicza wynik.

Co oznacza stan obiektu w programowaniu obiektowym?

Stan obiektu to aktualne wartości jego atrybutów. Na przykład stan obiektu `konto` może obejmować numer konta i saldo.

Dlaczego atrybuty obiektu mogą mieć różne wartości dla różnych instancji tej samej klasy?

Klasa jest wzorcem, a każdy obiekt utworzony na jej podstawie ma własny zestaw danych. Dlatego dwa obiekty klasy `Uczen` mogą mieć inne imię, nazwisko i ocenę.

Dlaczego odpowiedź „umożliwiają przeprowadzanie operacji na obiektach” nie opisuje atrybutów?

Operacje na obiektach wykonują metody, a nie atrybuty. Atrybuty służą głównie do przechowywania informacji.

Jaki jest związek atrybutów z hermetyzacją?

Hermetyzacja polega m.in. na ukrywaniu atrybutów przed bezpośrednim dostępem z zewnątrz klasy. Dzięki temu dane obiektu są lepiej chronione i kontrolowane.

Czy zmienna lokalna w funkcji jest tym samym co atrybut klasy?

Nie. Zmienna lokalna istnieje tylko wewnątrz funkcji lub metody, natomiast atrybut należy do obiektu albo klasy i opisuje jego dane.

Czym jest modyfikator dostępu w programowaniu obiektowym?

Modyfikator dostępu określa, skąd można korzystać z pól, metod lub klas. Przykładami są `public`, `private` i `protected`.

Dlaczego pola klasy często oznacza się jako `private`?

Aby chronić dane obiektu przed bezpośrednią zmianą z zewnątrz. Dostęp do nich odbywa się wtedy przez kontrolowane metody klasy.

Jaki jest związek między `private` a hermetyzacją?

`private` jest jednym z podstawowych narzędzi hermetyzacji. Pozwala ukryć wewnętrzne dane klasy i udostępnić tylko wybrane operacje.

Czym różni się `private` od `public`?

`private` pozwala na dostęp tylko wewnątrz klasy, a `public` umożliwia dostęp także z zewnątrz, np. przez obiekt klasy.

Czym różni się `private` od `protected`?

`private` jest dostępne tylko w tej samej klasie. `protected` jest dostępne również w klasach pochodnych, czyli dziedziczących.

Czy `static` jest modyfikatorem dostępu?

Nie. `static` określa, że element należy do klasy, a nie do konkretnego obiektu. Nie decyduje bezpośrednio o poziomie dostępu.

Jak można bezpiecznie udostępnić prywatne pole klasy?

Można użyć metod dostępowych, np. getterów i setterów. Pozwalają one odczytać lub zmienić wartość pola w kontrolowany sposób.

Czym jest konstruktor w programowaniu obiektowym?

Konstruktor to specjalny element klasy wywoływany podczas tworzenia obiektu. Jego głównym zadaniem jest przygotowanie obiektu do działania, np. ustawienie początkowych wartości pól.

Kiedy wykonywany jest konstruktor?

Konstruktor wykonuje się automatycznie w momencie tworzenia nowej instancji klasy. Programista zwykle nie wywołuje go jak zwykłej metody.

Co najczęściej robi konstruktor?

Najczęściej inicjalizuje pola obiektu, ustawia wartości domyślne lub przyjmuje dane potrzebne do utworzenia poprawnego obiektu.

Czym konstruktor różni się od zwykłej metody?

Konstruktor służy do tworzenia i inicjalizacji obiektu, a zwykła metoda wykonuje operacje na już istniejącym obiekcie. W wielu językach konstruktor nie ma typu zwracanego.

Czy konstruktor usuwa obiekt z pamięci?

Nie. Usuwanie lub zwalnianie zasobów jest związane z destruktorem albo mechanizmem zarządzania pamięcią, np. garbage collectorem.

Czym jest konstruktor domyślny?

Konstruktor domyślny to konstruktor, który można wywołać bez argumentów. Może być zdefiniowany przez programistę albo automatycznie wygenerowany przez język.

Po co stosuje się konstruktory z parametrami?

Pozwalają przekazać wartości początkowe podczas tworzenia obiektu. Dzięki temu obiekt od razu może mieć poprawnie ustawiony stan.

Czym jest destruktor w klasie?

Destruktor to specjalna metoda klasy wywoływana podczas niszczenia obiektu. Służy głównie do zwalniania zasobów, np. pamięci, uchwytów do plików lub połączeń.

Kiedy wywoływany jest destruktor?

Destruktor jest wywoływany automatycznie, gdy obiekt przestaje istnieć, np. po wyjściu z zakresu zmiennej lokalnej albo po użyciu `delete` dla obiektu utworzonego dynamicznie.

Czym destruktor różni się od konstruktora?

Konstruktor tworzy i inicjalizuje obiekt, natomiast destruktor wykonuje czynności porządkowe przed usunięciem obiektu. Konstruktor działa na początku życia obiektu, destruktor na końcu.

Czy destruktor tworzy nowe instancje klasy?

Nie. Tworzenie nowych instancji jest rolą konstruktora, a nie destruktora. Destruktor odpowiada za zakończenie życia obiektu.

Dlaczego destruktor jest ważny przy dynamicznej alokacji pamięci?

Jeśli obiekt rezerwuje pamięć dynamicznie, destruktor może ją zwolnić. Brak takiego zwolnienia może prowadzić do wycieków pamięci.

Czy destruktor służy do testów jednostkowych klasy?

Nie. Testy jednostkowe są wykonywane przez osobny kod testujący, np. z użyciem frameworków testowych. Destruktor nie służy do sprawdzania poprawności działania klasy.

Czym różni się składnik statyczny od składnika instancyjnego?

Składnik statyczny należy do klasy i jest wspólny dla wszystkich obiektów. Składnik instancyjny należy do konkretnego obiektu i każdy obiekt może mieć własną wartość.

Jak zwykle odwołuje się do pola lub metody statycznej?

Najczęściej przez nazwę klasy, np. `NazwaKlasy.NazwaMetody()` albo `NazwaKlasy.Pole`. Nie trzeba wcześniej tworzyć obiektu tej klasy.

Czy metoda statyczna może korzystać bezpośrednio z pól niestatycznych?

Nie, ponieważ pola niestatyczne istnieją dopiero w konkretnym obiekcie. Metoda statyczna może z nich korzystać dopiero wtedy, gdy otrzyma referencję do obiektu.

Czy `static` oznacza to samo co `private`?

Nie. `static` określa przynależność składnika do klasy, a `private` określa poziom dostępu. Składnik może być jednocześnie np. `private static`.

Do czego często używa się pól statycznych?

Do przechowywania danych wspólnych dla całej klasy, np. liczby utworzonych obiektów, konfiguracji globalnej lub stałych wartości.

Do czego często używa się metod statycznych?

Do operacji niezależnych od stanu konkretnego obiektu, np. metod pomocniczych, obliczeń matematycznych lub tworzenia obiektów w metodach fabrykujących.

Czym różni się konstruktor zwykły od konstruktora kopiującego?

Zwykły konstruktor inicjalizuje nowy obiekt podanymi wartościami. Konstruktor kopiujący inicjalizuje nowy obiekt na podstawie już istniejącego obiektu tej samej klasy.

Kiedy w C++ automatycznie wywoływany jest konstruktor kopiujący?

Najczęściej podczas zapisu typu `Obiekt b = a`, przy przekazywaniu obiektu do funkcji przez wartość oraz przy zwracaniu obiektu przez wartość.

Dlaczego parametr konstruktora kopiującego zwykle ma postać referencji do stałej?

Referencja zapobiega tworzeniu kolejnej kopii obiektu, a `const` chroni obiekt źródłowy przed modyfikacją.

Czym różni się konstruktor kopiujący od destruktora?

Konstruktor kopiujący tworzy nowy obiekt jako kopię istniejącego. Destruktor jest wywoływany podczas niszczenia obiektu i służy do zwalniania zasobów.

Co oznacza płytka kopia obiektu?

Płytka kopia polega na skopiowaniu samych wartości pól, np. adresów wskaźników. Może to prowadzić do sytuacji, w której dwa obiekty wskazują na ten sam zasób.

Kiedy warto napisać własny konstruktor kopiujący?

Własny konstruktor kopiujący jest potrzebny szczególnie wtedy, gdy klasa zarządza pamięcią dynamiczną lub innymi zasobami wymagającymi kontrolowanego kopiowania.

Czym są modyfikatory dostępu w programowaniu obiektowym?

Modyfikatory dostępu określają, skąd można korzystać z pól, metod i innych składników klasy. Przykładami są `public`, `private` i `protected`.

Jaka jest różnica między `private` a `protected`?

`private` pozwala na dostęp tylko wewnątrz tej samej klasy. `protected` pozwala dodatkowo na dostęp w klasach potomnych.

Dlaczego `public` nie jest poprawną odpowiedzią w tym pytaniu?

`public` oznacza dostęp z dowolnego miejsca programu. Pytanie dotyczy dostępu ograniczonego tylko do klasy i jej klas potomnych.

Dlaczego `static` nie jest modyfikatorem dostępu?

`static` określa, że składnik należy do klasy, a nie do konkretnego obiektu. Nie mówi samo w sobie, kto ma dostęp do tego składnika.

Jak `protected` wspiera dziedziczenie?

Pozwala klasom potomnym korzystać z wybranych elementów klasy bazowej bez udostępniania ich całemu programowi.

Jak `protected` wiąże się z hermetyzacją?

`protected` ogranicza dostęp do danych klasy, ale nadal umożliwia ich użycie w hierarchii dziedziczenia. Dzięki temu szczegóły implementacji nie muszą być całkowicie publiczne.