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: 1799.
Strona 12 z 20.
Dlaczego wywołanie bazowa->metoda() wypisuje „Pochodna.”, mimo że wskaźnik ma typ KlasaBazowa*?
Ponieważ metoda w klasie bazowej jest oznaczona jako `virtual`. C++ wybiera wtedy wersję metody na podstawie rzeczywistego typu obiektu, czyli `KlasaPochodna`.
Jaką rolę pełni słowo kluczowe virtual w tym kodzie?
`virtual` powoduje dynamiczne wiązanie metody. Dzięki temu przy wywołaniu metody przez wskaźnik do klasy bazowej uruchamiana jest metoda z klasy pochodnej.
Co wypisałby program, gdyby usunąć słowo virtual z klasy bazowej?
Wtedy `bazowa->metoda()` wywołałoby metodę z klasy bazowej, a `pochodna->metoda()` metodę z klasy pochodnej. Wynik byłby: `Bazowa. Pochodna.`
Czym jest polimorfizm w kontekście tego przykładu?
Polimorfizm oznacza, że ten sam zapis wywołania metody może uruchomić różne implementacje w zależności od rzeczywistego typu obiektu.
Jaka jest różnica między typem wskaźnika a rzeczywistym typem obiektu?
Typ wskaźnika określa, przez jaki typ odwołujemy się do obiektu, np. `KlasaBazowa*`. Rzeczywisty typ obiektu to typ utworzony przez `new`, tutaj `KlasaPochodna`.
Dlaczego pochodna->metoda() również wypisuje „Pochodna.”?
Wskaźnik `pochodna` ma typ `KlasaPochodna*` i wskazuje na obiekt klasy pochodnej. Dlatego bezpośrednio wywoływana jest metoda z klasy `KlasaPochodna`.
Co oznacza zapis class KlasaPochodna : public KlasaBazowa?
Oznacza publiczne dziedziczenie. Klasa `KlasaPochodna` przejmuje dostępne elementy klasy `KlasaBazowa` i może nadpisywać jej metody.
Po czym rozpoznać dziedziczenie w kodzie Java?
Najczęściej po słowie kluczowym `extends`, które oznacza, że jedna klasa rozszerza inną klasę. Przykład: `class Truskawka extends Owoc`.
Czym jest klasa bazowa w dziedziczeniu?
Klasa bazowa, inaczej nadrzędna, to klasa, po której dziedziczą inne klasy. W przykładzie klasą bazową jest `Owoc`.
Czym jest klasa potomna?
Klasa potomna to klasa utworzona na podstawie innej klasy. Przejmuje ona jej dostępne pola i metody oraz może dodawać własne elementy.
Dlaczego przykład z klasami Owoc, Truskawka i Jablko oznacza dziedziczenie?
Ponieważ `Truskawka` i `Jablko` rozszerzają klasę `Owoc` za pomocą `extends`. Oznacza to relację typu „Truskawka jest owocem”.
Czym dziedziczenie różni się od hermetyzacji?
Dziedziczenie opisuje relację między klasą bazową i potomną. Hermetyzacja polega na ukrywaniu danych wewnątrz klasy i kontrolowaniu dostępu do nich.
Czym dziedziczenie różni się od polimorfizmu?
Dziedziczenie pozwala tworzyć klasy potomne na podstawie klasy bazowej. Polimorfizm pozwala traktować obiekty różnych klas w jednolity sposób, np. przez typ klasy bazowej.
Czy w Javie klasa może dziedziczyć po wielu klasach jednocześnie?
Nie. W Javie klasa może dziedziczyć bezpośrednio tylko po jednej klasie. Wielokrotne dziedziczenie zachowania realizuje się przez interfejsy.
Czym jest Angular?
Angular to framework front-endowy służący do tworzenia aplikacji internetowych typu SPA. Jest rozwijany przez Google i standardowo wykorzystuje TypeScript.
Dlaczego Angular wykorzystuje TypeScript?
TypeScript ułatwia tworzenie dużych aplikacji dzięki statycznemu typowaniu, klasom, interfejsom i lepszej kontroli błędów. Dzięki temu kod jest łatwiejszy w utrzymaniu.
Jaka jest różnica między TypeScriptem a JavaScriptem?
TypeScript jest rozszerzeniem JavaScriptu o typy i dodatkowe mechanizmy programistyczne. Kod TypeScript jest kompilowany lub transpilowany do JavaScriptu.
Czy przeglądarka uruchamia bezpośrednio kod TypeScript?
Nie. Przeglądarka uruchamia JavaScript, dlatego kod TypeScript musi zostać wcześniej przekształcony do JavaScriptu.
Czy PHP, C# albo PostScript są językami używanymi do tworzenia Angulara?
Nie. PHP jest językiem często używanym po stronie serwera, C# jest popularny m.in. w platformie .NET, a PostScript służy głównie do opisu stron i druku. Angular jest związany z TypeScriptem.
Co oznacza statyczne typowanie w TypeScripcie?
Statyczne typowanie oznacza, że typy danych mogą być sprawdzane przed uruchomieniem programu. Pozwala to szybciej wykrywać błędy w kodzie.
Czym są testy funkcjonalne aplikacji?
Testy funkcjonalne sprawdzają, czy aplikacja wykonuje wymagane funkcje zgodnie ze specyfikacją. Oceniają zachowanie systemu z punktu widzenia użytkownika.
Dlaczego poprawność wyświetlanych elementów aplikacji webowej można uznać za test funkcjonalny?
Ponieważ użytkownik korzysta z aplikacji przez interfejs, a poprawne wyświetlanie elementów wpływa na możliwość wykonania funkcji. Jeśli przycisk, formularz lub komunikat nie pojawia się poprawnie, funkcja może być niedostępna.
Czym różnią się testy funkcjonalne od testów wydajnościowych?
Testy funkcjonalne sprawdzają, czy funkcje działają poprawnie. Testy wydajnościowe sprawdzają szybkość, czas odpowiedzi i zachowanie aplikacji pod obciążeniem.
Dlaczego bezpieczeństwo aplikacji nie jest typowym testem funkcjonalnym?
Bezpieczeństwo dotyczy odporności aplikacji na zagrożenia, np. ataki, wycieki danych lub nieautoryzowany dostęp. Jest to cecha jakościowa systemu, dlatego zwykle zalicza się ją do testów niefunkcjonalnych.
Co można sprawdzać podczas testów UI aplikacji webowej?
Można sprawdzać widoczność elementów, poprawność tekstów, działanie przycisków, formularzy, linków oraz zgodność wyglądu strony z projektem lub wymaganiami.
Czy optymalizacja kodu jest testem funkcjonalnym?
Nie. Optymalizacja kodu dotyczy jakości technicznej, czytelności, efektywności lub szybkości działania programu, a nie bezpośrednio realizacji funkcji widocznych dla użytkownika.
Jak rozpoznać w zadaniu egzaminacyjnym odpowiedź dotyczącą testów funkcjonalnych?
Należy szukać odpowiedzi związanej z działaniem funkcji, reakcją aplikacji na działania użytkownika lub zgodnością z wymaganiami funkcjonalnymi. Odpowiedzi dotyczące szybkości, bezpieczeństwa i optymalizacji zwykle wskazują na testy niefunkcjonalne.
Do czego służy atrybut Title w znaczniku Window w WPF?
Atrybut `Title` ustawia tekst widoczny na pasku tytułu okna. Nie jest to nazwa obiektu ani identyfikator kontrolki.
Co robi metoda setTitle() w klasie JFrame?
Metoda `setTitle()` ustawia tytuł okna Swing. Na przykład `setTitle("Tekst")` wyświetli napis „Tekst” na pasku tytułu okna.
Czym różni się tytuł okna od nazwy obiektu?
Tytuł okna jest tekstem widocznym dla użytkownika. Nazwa obiektu lub zmiennej służy programiście do odwoływania się do elementu w kodzie.
Jak nadaje się nazwę elementowi w XAML, jeśli nie przez Title?
Do nadania identyfikatora elementowi w XAML używa się zwykle `x:Name` lub `Name`. `Title` odpowiada tylko za napis na pasku tytułu okna.
Co oznacza this w wywołaniu this.setTitle("Tekst")?
`this` oznacza bieżący obiekt klasy. W tym przypadku wskazuje na aktualnie tworzone okno, dla którego ustawiany jest tytuł.
Jaką rolę pełni extends JFrame w kodzie Java Swing?
`extends JFrame` oznacza, że klasa dziedziczy po klasie `JFrame`. Dzięki temu obiekt klasy może zachowywać się jak okno aplikacji Swing.
Co zostanie wyświetlone przez kod React z komponentem Heading?
Zostanie wyświetlony tekst „Egzamin zawodowy” wewnątrz znacznika h1, czyli jako nagłówek pierwszego poziomu.
Dlaczego odpowiedź nie dotyczy akapitu?
Akapit w HTML tworzy znacznik p. W podanym kodzie użyto znacznika h1, więc tekst jest nagłówkiem, a nie akapitem.
Jaką rolę pełni props.title w komponencie React?
props.title odczytuje wartość przekazaną do komponentu przez atrybut title. W przykładzie tą wartością jest tekst „Egzamin zawodowy”.
Co oznacza zapis {{title}} w szablonie Angulara?
To interpolacja, czyli wstawienie wartości pola title z klasy komponentu do kodu HTML szablonu.
Czy title w tym przykładzie ustawia tytuł strony internetowej?
Nie. W React jest to nazwa propsa, a w Angularze nazwa pola klasy komponentu. Tytuł strony ustawia się inaczej, np. przez element title w sekcji head lub odpowiednie usługi frameworka.
Dlaczego oba fragmenty kodu są równoważne?
Oba prowadzą do wyrenderowania tego samego elementu HTML: nagłówka h1 z tekstem „Egzamin zawodowy”. Różnią się składnią i frameworkiem.
Jaka jest różnica między znacznikiem h1 a atrybutem title w HTML?
Znacznik h1 wyświetla widoczny nagłówek na stronie. Atrybut title dodaje podpowiedź lub opis elementu, zwykle widoczny po najechaniu kursorem.
Do czego służą modyfikatory dostępu w programowaniu obiektowym?
Modyfikatory dostępu określają, skąd można korzystać z pól i metod klasy. Pomagają kontrolować widoczność elementów klasy i wspierają hermetyzację.
Czym różni się protected od private?
Element private jest dostępny tylko wewnątrz tej samej klasy. Element protected jest dostępny także w klasach dziedziczących.
Czym różni się protected od public?
Element public jest dostępny z dowolnego miejsca programu, jeśli mamy dostęp do obiektu. Element protected nie jest dostępny z zewnątrz klasy, lecz tylko w klasie i jej klasach pochodnych.
Dlaczego protected jest związany z dziedziczeniem?
Ponieważ umożliwia klasom potomnym korzystanie z wybranych metod lub pól klasy bazowej bez udostępniania ich całemu programowi.
Czy zwykła funkcja spoza klasy może wywołać metodę protected?
Nie. Metoda protected nie jest dostępna dla zwykłych funkcji zewnętrznych ani dla kodu spoza klasy i klas dziedziczących.
Czy reinterpret_cast jest modyfikatorem dostępu?
Nie. reinterpret_cast to operator rzutowania w C++, używany do niskopoziomowej konwersji typów. Nie kontroluje widoczności metod ani pól klasy.
Kiedy warto oznaczyć metodę jako protected?
Gdy metoda ma być częścią mechanizmu klasy bazowej i ma być używana przez klasy potomne, ale nie powinna być wywoływana bezpośrednio przez kod zewnętrzny.
Jak działa pętla for w podanym kodzie?
Zmienna `i` startuje od 0, pętla działa dopóki `i <= 100`, a po każdym obiegu `i` zwiększa się o 2. Dlatego przyjmuje kolejne liczby parzyste od 0 do 100.
Co oznacza instrukcja tmp += i?
Jest to skrócony zapis instrukcji `tmp = tmp + i`. Do aktualnej wartości `tmp` dodawana jest wartość `i`.
Dlaczego poprawna odpowiedź to suma liczb parzystych, a nie same liczby parzyste?
Ponieważ kod nie wypisuje każdej wartości `i`, tylko dodaje ją do zmiennej `tmp`. Na końcu do etykiety trafia jedna wartość: obliczona suma.
Czy liczba 100 zostanie uwzględniona w obliczeniach?
Tak, ponieważ warunek pętli to `i <= 100`. Operator `<=` oznacza „mniejsze lub równe”, więc wartość 100 jest jeszcze przetwarzana.
Jakie wartości przyjmie zmienna i w tej pętli?
Zmienna `i` przyjmie wartości: 0, 2, 4, 6 i tak dalej aż do 100. Są to liczby parzyste z podanego zakresu.
Co zostanie przypisane do label.Content?
Do `label.Content` zostanie przypisana końcowa wartość zmiennej `tmp`, czyli suma liczb parzystych od 0 do 100.
Jaka jest liczbowa wartość tej sumy?
Suma liczb parzystych od 0 do 100 wynosi 2550. W pytaniu odpowiedź opisuje jednak znaczenie wyniku, a nie jego konkretną wartość liczbową.
Jak zmieniłby się wynik, gdyby w pętli było i++ zamiast i += 2?
Wtedy pętla przechodziłaby przez wszystkie liczby od 0 do 100, a nie tylko parzyste. Zmienna `tmp` zawierałaby sumę wszystkich liczb z tego zakresu.
Czym rootkit różni się od wirusa komputerowego?
Wirus infekuje pliki i rozprzestrzenia się zwykle po ich uruchomieniu. Rootkit skupia się na ukryciu obecności atakującego i zapewnieniu mu uprzywilejowanego dostępu do systemu.
Dlaczego rootkit jest trudny do wykrycia?
Rootkit może ukrywać procesy, pliki, wpisy systemowe lub połączenia sieciowe. Często działa na niskim poziomie systemu, przez co zwykłe narzędzia diagnostyczne mogą go nie pokazywać.
Czym keylogger różni się od rootkita?
Keylogger służy głównie do rejestrowania naciśnięć klawiszy, np. haseł. Rootkit służy przede wszystkim do ukrycia dostępu i utrzymania kontroli nad systemem.
Czym robak komputerowy różni się od rootkita?
Robak potrafi samodzielnie rozprzestrzeniać się przez sieć. Rootkit nie musi się rozprzestrzeniać, jego zadaniem jest ukrycie obecności atakującego i często nadanie mu wysokich uprawnień.
Jakie objawy mogą sugerować obecność rootkita w systemie?
Mogą pojawić się nietypowe procesy, spadek wydajności, nieznane połączenia sieciowe, problemy z antywirusem lub rozbieżności między narzędziami pokazującymi pliki i procesy.
Jak można ograniczyć ryzyko infekcji rootkitem?
Należy aktualizować system, nie uruchamiać nieznanych plików, korzystać z konta bez uprawnień administratora i stosować sprawdzone zabezpieczenia. Ważne jest też instalowanie oprogramowania tylko z zaufanych źródeł.
Do czego służy funkcja printf?
`printf` służy do wypisywania tekstu i wartości zmiennych na standardowe wyjście, najczęściej na konsolę. Używa specyfikatorów formatu, takich jak `%d`, `%f` czy `%s`.
Co oznacza specyfikator %d w printf?
`%d` oznacza wypisanie liczby całkowitej typu `int`. W przykładzie wartość zmiennej `a` równa 5 zostanie wypisana jako `5`.
Co oznacza zapis %.2f?
`%.2f` oznacza wypisanie liczby zmiennoprzecinkowej z dokładnie dwoma miejscami po przecinku. Wartość `5.12345` zostanie pokazana jako `5.12`.
Dlaczego wynik zmiennej w jest wypisywany jako 10.123450?
Specyfikator `%f` domyślnie wypisuje liczbę zmiennoprzecinkową z sześcioma miejscami po przecinku. Suma `5 + 5.12345` daje `10.12345`, więc zostaje wypisana jako `10.123450`.
Co oznacza specyfikator %s?
`%s` oznacza napis, czyli ciąg znaków. W przykładzie zostaje zastąpiony argumentem `"Wynik"`.
Jak są dopasowywane argumenty do specyfikatorów w printf?
Argumenty są podstawiane kolejno od lewej do prawej. Pierwszy specyfikator korzysta z pierwszego argumentu po formacie, drugi z drugiego itd.
Czy tekst znajdujący się między specyfikatorami formatu jest wypisywany?
Tak. Wszystko, co nie jest specyfikatorem formatu, np. słowa, znaki `+`, `=` i spacje, jest wypisywane dosłownie.