Wyniki egzaminu

Informacje o egzaminie:
  • Zawód: Technik programista
  • Kwalifikacja: INF.04 - Projektowanie, programowanie i testowanie aplikacji
  • Data rozpoczęcia: 15 grudnia 2025 12:45
  • Data zakończenia: 15 grudnia 2025 13:01

Egzamin niezdany

Wynik: 17/40 punktów (42,5%)

Wymagane minimum: 20 punktów (50%)

Udostępnij swój wynik
Szczegółowe wyniki:
Pytanie 1

Który z języków programowania jest najczęściej wykorzystywany do budowania aplikacji internetowych po stronie serwera?

A. PHP
B. HTML
C. JavaScript
D. CSS
JavaScript jest językiem działającym głównie po stronie klienta (przeglądarki), chociaż dzięki Node.js może być używany także po stronie serwera, jednak tradycyjnie nie jest językiem stricte backendowym. HTML to język znaczników służący do strukturalnego tworzenia treści na stronach internetowych, ale sam w sobie nie może obsługiwać logiki serwera. CSS to język odpowiedzialny za stylizację stron internetowych i nie pełni roli języka programowania po stronie serwera.

Pytanie 2

Jakie obliczenia można wykonać za pomocą poniższego algorytmu, który operuje na dodatnich liczbach całkowitych?

Ilustracja do pytania
A. sumę cyfr wprowadzonej liczby
B. liczbę cyfr w wprowadzonej liczbie
C. największy wspólny dzielnik wprowadzonej liczby
D. sumę wprowadzonych liczb
Wybierając odpowiedź dotyczącą liczby cyfr w wprowadzonej liczbie, pokazujesz dobre zrozumienie tego, jak działa prezentowany algorytm. W praktyce bardzo często spotyka się podobne rozwiązania, gdy trzeba np. zliczyć, ile znaków ma PESEL, numer telefonu lub numer identyfikacyjny w bazie danych. Algorytm wykonuje bardzo prostą, ale jednocześnie sprytną operację – dzieli podaną liczbę przez 10 (zawsze całkowicie, bez reszty), aż ta liczba się wyzeruje. Za każdym obrotem pętli zwiększa licznik, więc po zakończeniu działania licznik wskazuje, ile razy można było podzielić liczbę przez 10, czyli ile było w niej cyfr. To dokładnie odpowiada liczbie cyfr w zapisie dziesiętnym. Podejście to jest bardzo efektywne, bo nie wymaga konwersji liczby na tekst ani używania dodatkowych struktur danych. W profesjonalnym kodzie często preferuje się takie rozwiązania – są szybkie i niezawodne. Moim zdaniem warto znać ten wzorzec, bo przydaje się zarówno w algorytmice, jak i analizie danych czy podczas implementacji walidacji pól liczbowych w bazach danych lub formularzach. Dodatkowo, zgodnie z dobrymi praktykami, algorytm nie ulega błędom związanym z nietypowymi danymi – działa dla każdej dodatniej liczby całkowitej. Warto zapamiętać takie sztuczki, bo potem życie programisty jest łatwiejsze.

Pytanie 3

Jak określa się proces transferu danych z lokalnego komputera na serwer?

A. Pobieranie danych
B. Streaming
C. Wysyłanie danych
D. Przesyłanie danych
Pojęcia takie jak pobieranie danych, przesyłanie danych oraz streaming są często mylone z wysyłaniem danych, jednak każde z nich ma swoją unikalną definicję i zastosowanie. Pobieranie danych odnosi się do procesu ściągania informacji z serwera na komputer lokalny. Jest to operacja odwrotna do wysyłania danych i jest kluczowa dla użytkowników, którzy chcą uzyskać dostęp do plików lub zasobów umieszczonych na serwerze. Przykładowo, podczas przeglądania internetu, przeglądarka pobiera dane z serwerów, aby wyświetlić stronę użytkownikowi. Przesyłanie danych, z kolei, to termin ogólny, który można wykorzystać do opisania dowolnej wymiany informacji między lokalnym a zdalnym systemem. Obejmuje zarówno wysyłanie, jak i pobieranie danych, co sprawia, że użycie go w kontekście konkretnej operacji może być mylące. Wreszcie, streaming odnosi się do strumieniowego przesyłania danych, które umożliwia użytkownikom nieprzerwaną transmisję multimediów, takich jak filmy czy muzyka, w czasie rzeczywistym. W tym przypadku, dane są przesyłane w małych partiach, co pozwala na ich natychmiastowe odtwarzanie, a nie przechowywanie lokalnie. W związku z tym, choć wszystkie te procesy dotyczą transferu danych, to tylko wysyłanie danych odnosi się do przesyłania informacji z komputera lokalnego na serwer.

Pytanie 4

Jakie środowisko deweloperskie jest powszechnie wykorzystywane do produkcji aplikacji webowych w języku Java?

A. PyCharm
B. Android Studio
C. XCode
D. Eclipse
XCode to środowisko programistyczne przeznaczone głównie do tworzenia aplikacji na systemy Apple, takie jak macOS, iOS, iPadOS, a nie do aplikacji webowych w języku Java. Android Studio jest dedykowane tworzeniu aplikacji mobilnych na system Android i nie jest używane w środowisku webowym dla Javy. PyCharm to narzędzie skoncentrowane na języku Python i nie posiada natywnego wsparcia dla programowania w Javie, co czyni go nieodpowiednim wyborem dla aplikacji webowych opartych na tym języku.

Pytanie 5

Jak nazywa się proces znajdowania i usuwania błędów w kodzie?

A. Kompensowanie
B. Interpretowanie
C. Debugowanie
D. Kompilowanie
Procesy kompilowania, interpretowania i kompensowania mają swoje specyficzne funkcje w programowaniu, ale nie są bezpośrednio związane z usuwaniem błędów w kodzie. Kompilowanie to proces tłumaczenia kodu źródłowego napisanego w języku wysokiego poziomu na kod maszynowy, który może być wykonany przez komputer. Jest to kluczowy etap w przypadku języków kompilowanych, takich jak C++ czy Java, gdzie kod źródłowy musi zostać przekształcony w formę zrozumiałą dla procesora. Interpretowanie, z kolei, polega na bezpośrednim wykonywaniu kodu źródłowego przez interpreter, który analizuje i uruchamia instrukcje programu linijka po linijce. Języki takie jak Python czy JavaScript często wykorzystują ten proces, co może wpływać na wydajność wykonania, ale ułatwia testowanie i modyfikacje kodu. Kompensowanie nie odnosi się bezpośrednio do programowania, ale w kontekście ogólnym oznacza wyrównywanie lub łagodzenie skutków błędów czy niedoskonałości. Może dotyczyć np. strategii zarządzania projektem, ale nie jest procesem technicznym związanym z debugowaniem kodu. Te różnice w funkcjonalności i zastosowaniu pokazują, jak ważne jest precyzyjne rozumienie terminologii programistycznej w kontekście debugowania i innych procesów.

Pytanie 6

Jakie narzędzie można wykorzystać do tworzenia aplikacji mobilnych typu cross-platform w C#?

A. platformę Xamarin
B. platformę React Native
C. środowisko XCode
D. środowisko Android Studio
XCode to zintegrowane środowisko programistyczne stworzone przez Apple, które służy głównie do tworzenia aplikacji na platformy iOS oraz macOS. Jego użycie ogranicza się do systemów operacyjnych Apple, co wyklucza możliwość tworzenia aplikacji cross-platform. W kontekście programowania w C#, XCode nie oferuje wsparcia ani funkcji, które umożliwiałyby rozwój aplikacji mobilnych na różne platformy. React Native jest frameworkiem stworzonym przez Facebook, który umożliwia tworzenie aplikacji mobilnych w JavaScript, a nie w C#. Choć React Native wspiera wiele platform, to jednak nie jest to technologia zgodna z C#, co czyni ją nieodpowiednią dla deweloperów preferujących ten język. Android Studio to z kolei oficjalne IDE dla systemu Android, oparte na Javie oraz Kotlinie, co również eliminuje możliwość wykorzystania C#. Tak więc, ani XCode, ani React Native, ani Android Studio nie są odpowiednie do tworzenia aplikacji mobilnych w języku C#, co czyni je niepoprawnymi odpowiedziami w kontekście tego pytania.

Pytanie 7

Jakie jest podstawowe założenie normalizacji krajowej?

A. Utrudnienie handlu międzynarodowego
B. Ujednolicenie wymagań technicznych i poprawa bezpieczeństwa
C. Zwiększenie ilości regulacji prawnych
D. Wzrost kosztów produkcji
Ujednolicenie wymagań technicznych i poprawa bezpieczeństwa to główne cele normalizacji krajowej. Normalizacja polega na opracowywaniu standardów, które są stosowane w różnych branżach w celu zapewnienia jakości, bezpieczeństwa i kompatybilności produktów oraz usług. Dzięki normalizacji producenci tworzą wyroby zgodne z określonymi normami, co zwiększa ich konkurencyjność na rynku krajowym i międzynarodowym. Wdrożenie jednolitych standardów wpływa także na bezpieczeństwo użytkowników, minimalizując ryzyko awarii lub niezgodności produktów.

Pytanie 8

Co to jest shadow DOM?

A. Technika stylizacji elementów w CSS przy użyciu cieni
B. Mechanizm enkapsulacji kodu HTML, CSS i JavaScript w komponenty webowe
C. Wirtualny DOM używany przez biblioteki jak React i Vue.js
D. Metoda renderowania grafiki 3D w przeglądarkach
Shadow DOM to technika pozwalająca na enkapsulację kodu HTML, CSS oraz JavaScript w komponentach webowych, co jest kluczowe w kontekście tworzenia aplikacji opartych na Web Components. Dzięki zastosowaniu Shadow DOM, elementy wewnętrzne komponentu są izolowane od reszty dokumentu, co eliminuje problemy z kolizjami nazw klas CSS oraz pozwala na tworzenie bardziej modularnych i wielokrotnego użytku elementów. Przykładem zastosowania Shadow DOM mogą być komponenty interfejsu użytkownika, takie jak przyciski czy karty, które zawierają własne style i logikę, nie wpływając na globalne style strony. To podejście jest wspierane przez standardy W3C i zalecane w projektach, gdzie skala i złożoność aplikacji wymaga wysokiej wydajności i organizacji kodu. Dobrze zaprojektowane komponenty z użyciem Shadow DOM mogą znacznie uprościć rozwój i utrzymanie aplikacji webowych, czyniąc je bardziej responsywnymi i dostosowanymi do różnych środowisk.

Pytanie 9

Jaką cechą odznacza się framework w porównaniu do biblioteki?

A. Framework zapewnia API do szerszego zestawu funkcji
B. Framework określa strukturę aplikacji i zapewnia jej fundament
C. Framework stanowi zbiór funkcji, które programista ma możliwość wykorzystania
D. Framework oferuje funkcje użyteczne w konkretnej dziedzinie problemu
Framework dostarcza gotowy szkielet aplikacji i narzuca architekturę, zgodnie z którą programista musi budować swoją aplikację. Oferuje zestaw narzędzi i komponentów, które upraszczają rozwój oprogramowania, przy jednoczesnym ograniczeniu swobody działania. Dzięki frameworkowi, programista nie musi tworzyć aplikacji od podstaw – dostaje narzędzia, które integrują się ze sobą, co przyspiesza proces developmentu i zapewnia spójność aplikacji.

Pytanie 10

Kod w bibliotece React.js oraz w frameworku Angular, który został zaprezentowany, ma na celu wyświetlenie

Fragment kodu React.js:
state = {    zm1: 0   };
hanleEv = () => {
    this.setState({zm1: this.state.zm1 + 1});
}
render() {
    return (<div>
        <span>{this.state.zm1}</span>
        <button onClick={this.handleEv}>BTN_1</button>
    </div>);
}
Fragment kodu Angular:
@Component({
    selector: 'sel1',
    template: `<span>{{ zm1 }}</span>
              <button (click)="onBtnCilcked()">BTN_1</button>`
})
export class Licznik1Component {
    zm1 = 0;
    onBtnCilcked() { this.zm1++; }
}
A. tylko napisu BTN_1
B. wartości 0 po naciśnięciu przycisku
C. wyłącznie przycisku oraz obsłużenie zdarzenia click, które ono generuje
D. liczby kliknięć przycisku
Wydaje się, że łatwo tu popaść w uproszczenia lub ulec pierwszemu wrażeniu na temat działania tego kodu, zwłaszcza jeśli nie patrzy się na całą strukturę zarówno w React, jak i Angularze. Sam przycisk z napisem BTN_1 faktycznie występuje, ale nie to jest sednem – komponenty nie ograniczają się tylko do wyświetlania przycisku. Ich główną rolą jest obsługa interakcji: kliknięcie nie tylko wywołuje zdarzenie, lecz przede wszystkim modyfikuje stan licznika i od razu aktualizuje widok. Sądząc, że program ma wyświetlać „tylko napis” lub „tylko przycisk i obsługę click”, pomija się istotę działania frameworków: dynamiczną prezentację danych w odpowiedzi na działania użytkownika. Pojawia się też czasem mylne założenie, że widok pokazuje wartość 0 po kliknięciu – to nieprawda, bo oba fragmenty kodu startują z wartością 0, ale po kliknięciu ta wartość jest zwiększana i od razu pokazuje nową liczbę kliknięć. To bardzo typowy błąd, wynikający z niezrozumienia jak aktualizowany jest stan komponentu i jak natychmiast to wpływa na renderowanie widoku. Trzeba jeszcze pamiętać, że samo „obsłużenie zdarzenia click” jest tylko częścią procesu – pełna funkcjonalność polega na wyświetleniu aktualnej liczby kliknięć, czyli dynamicznej reakcji na akcje użytkownika. Dlatego w branży kładzie się nacisk na powiązanie warstwy widoku z logiką biznesową poprzez stan komponentu – to jest podstawa nowoczesnych aplikacji. Zakładając, że chodzi tylko o statyczny element lub samo zdarzenie, zupełnie pomija się sedno tego typu zadań, gdzie właśnie dynamiczna aktualizacja UI po akcji użytkownika jest kluczowa. Takie błędne założenia często biorą się z pobieżnego czytania kodu lub nieznajomości mechanizmów reaktywności i data bindingu, które są fundamentem zarówno Reacta, jak i Angulara.

Pytanie 11

Co to jest JWT (JSON Web Token)?

A. Format zapisu danych używany w bazach NoSQL
B. Standard definiujący sposób bezpiecznego przekazywania informacji jako obiekt JSON
C. Protokół komunikacyjny do transferu danych między klientem a serwerem
D. Biblioteka JavaScript do walidacji formularzy webowych
JWT, czyli JSON Web Token, jest standardem, który definiuje sposób bezpiecznego przekazywania informacji między dwiema stronami w postaci obiektu JSON. Tokeny JWT są powszechnie wykorzystywane w systemach autoryzacji i autoryzacji, umożliwiając przekazywanie zweryfikowanych i podpisanych danych. Struktura tokena składa się z trzech części: nagłówka, ładunku (payload) oraz podpisu. Nagłówek zazwyczaj określa typ tokena oraz algorytm użyty do podpisania, ładunek zawiera dane, które chcemy przesłać, a podpis jest generowany przy użyciu tajnego klucza, co zapewnia integralność danych. Przykładem zastosowania JWT może być system logowania, gdzie po pomyślnym zalogowaniu użytkownik otrzymuje token, który jest następnie używany do autoryzacji kolejnych zapytań do serwera. Dzięki swojej strukturze, JWT nie tylko zwiększa bezpieczeństwo, ale także umożliwia łatwą wymianę informacji między różnymi systemami, co jest szczególnie ważne w architekturach mikroserwisowych.

Pytanie 12

Który z wymienionych objawów może sugerować nagłe zagrożenie dla zdrowia?

A. Intensywne pocenie się w gorącym otoczeniu
B. Obniżony nastrój w ciągu dnia
C. Ostry ból w klatce piersiowej
D. Zwiększona efektywność pracy
Ostry ból w klatce piersiowej to jeden z najbardziej alarmujących objawów wskazujących na nagłe zagrożenie zdrowotne, takie jak zawał serca lub zatorowość płucna. Tego rodzaju ból jest często opisywany jako gniotący, ściskający lub rozlewający się na inne części ciała, takie jak ramię, szyja czy żuchwa. W takich przypadkach kluczowe jest szybkie wezwanie pomocy medycznej, ponieważ każda minuta opóźnienia może zwiększyć ryzyko powikłań lub śmierci. Edukacja w zakresie rozpoznawania tego objawu może uratować życie, dlatego tak ważne jest rozróżnianie go od innych mniej groźnych objawów.

Pytanie 13

W frameworkach do budowy aplikacji mobilnych lub desktopowych znajduje zastosowanie wzorzec MVVM, oznaczający Model-View-ViewModel. Te podejście do programowania oznacza, że

A. interfejs użytkownika oraz logika aplikacji są oddzielone
B. interfejs użytkownika i logika aplikacji są umieszczone w jednym pliku
C. kontrolki i widoki interfejsu użytkownika są zintegrowane z logiką aplikacji
D. w aplikacji obecny jest jedynie interfejs użytkownika
Pierwsza odpowiedź sugeruje, że interfejs użytkownika oraz logika aplikacji są kodowane w jednym pliku. Taki sposób organizacji kodu prowadzi do chaotyczności oraz trudności w zarządzaniu projektem. Łączenie tych dwóch warstw w jednym miejscu nie tylko utrudnia testowanie poszczególnych komponentów, ale również zwiększa ryzyko wprowadzenia błędów, gdyż zmiany w jednej części mogą niezamierzenie wpływać na drugą. Druga odpowiedź wskazuje, że kontrolki i widoki interfejsu użytkownika są zaszyte w logice aplikacji, co jest również sprzeczne z ideą MVVM. Kiedy interfejs jest bezpośrednio związany z logiką, programiści nie mogą łatwo modyfikować lub wymieniać elementów UI, co ogranicza elastyczność aplikacji. Czwarta odpowiedź twierdzi, że w aplikacji występuje tylko interfejs użytkownika, co jest niepoprawne, ponieważ każda dobrze zaprojektowana aplikacja wymaga zarówno logiki, jak i interfejsu do funkcjonowania. W kontekście MVVM, brak modelu i ViewModel prowadzi do zastosowania jedynie warstwy prezentacji, co jest nieefektywne i niezgodne z najlepszymi praktykami programistycznymi, które promują separację odpowiedzialności i modularność.

Pytanie 14

Co to jest debouncing w JavaScript?

A. Technika ograniczająca częstotliwość wywoływania funkcji poprzez opóźnienie jej wykonania
B. Proces optymalizacji kodu JavaScript podczas kompilacji
C. Metoda usuwania zduplikowanych zdarzeń w kodzie
D. Mechanizm zarządzania pamięcią dla zmiennych globalnych
Błędne odpowiedzi na to pytanie wynikają z nieporozumienia dotyczącego funkcji i technik w JavaScript. Wspomnienie o metodzie usuwania zduplikowanych zdarzeń w kodzie sugeruje mylne rozumienie debouncingu, który nie ma na celu eliminacji zdarzeń, ale kontrolę nad ich częstością wywoływania. Terminy związane z eliminacją zduplikowanych zdarzeń odnoszą się raczej do technik takich jak throttling, które również ograniczają liczbę wywołań, ale w sposób, który różni się od debouncingu. Proces optymalizacji kodu JavaScript podczas kompilacji to zupełnie inny temat, dotyczący narzędzi takich jak minifikatory i kompilatory, które nie mają związku z zarządzaniem zdarzeniami. Ponadto, mechanizm zarządzania pamięcią dla zmiennych globalnych to odrębna kwestia, dotycząca zarządzania pamięcią w JavaScript, a nie techniki związanej z wywoływaniem funkcji. Właściwe zrozumienie debouncingu wymaga uwzględnienia kontekstu zdarzeń oraz ich wpływu na wydajność aplikacji, co jest istotnym zagadnieniem w nowoczesnym programowaniu webowym. Typowe błędy myślowe prowadzące do mylnego wnioskowania mogą obejmować utożsamianie różnych technik programistycznych lub mylenie pojęć związanych z optymalizacją i zarządzaniem zdarzeniami.

Pytanie 15

Cytat zaprezentowany powyżej dotyczy metodyki RAD. Co oznacza ten skrót w języku polskim?

... (RAD) .... is a general term for adaptive software development approaches, and the name for James Martin's method of rapid development. In general, RAD approaches to software development put less emphasis on planning and more emphasis on an adaptive process. Prototypes are often used in addition to or sometimes even instead of design specifications.
Źródło: https://en.wikipedia.org/wiki Dostęp: 25.03.2021
A. szybki rozwój aplikacji
B. środowisko błyskawicznego programowania
C. środowisko do tworzenia aplikacji
D. zintegrowane środowisko deweloperskie
Wybór niepoprawnych odpowiedzi wynika z nieporozumienia dotyczącego znaczenia skrótu RAD. Pierwsza błędna odpowiedź środowisko rozwijania aplikacji nie odpowiada sednu metodyki RAD ponieważ odnosi się bardziej do ogólnego pojęcia platformy lub środowiska gdzie aplikacje są tworzone a nie do szybkiego procesu rozwoju. Nie oddaje to istoty metodyki która skupia się na skróceniu czasu cyklu życia aplikacji poprzez szybkie prototypowanie i wprowadzenie iteracyjnych zmian. Następnie środowisko szybkiego programowania również jest mylące ponieważ sugeruje zastosowanie narzędzi lub technologii które jedynie wspierają szybkie pisanie kodu a nie całego procesu projektowania testowania i wprowadzania do użytkowania. Zintegrowane środowisko programistyczne to termin odnoszący się do oprogramowania takiego jak IDE które oferuje narzędzia wspierające programistów w pisaniu testowaniu i debugowaniu kodu ale nie jest bezpośrednio związane z filozofią i technikami RAD. Typowym błędem myślowym jest skupienie się na pojedynczych etapach rozwoju oprogramowania a nie na całym procesie który metoda RAD opisuje jako całość łączącą szybkie tworzenie prototypów elastyczność i intensywną współpracę z klientem. Ważne jest zrozumienie że RAD to podejście systemowe mające na celu przyspieszenie dostarczania wartości klientom co nie jest osiągane przez samo szybkie kodowanie czy używanie zintegrowanych narzędzi programistycznych ale przez całościowe podejście do procesu tworzenia oprogramowania

Pytanie 16

Która z poniższych technologii jest używana do tworzenia animacji na stronach internetowych?

A. MySQL
B. CSS Animations
C. XML
D. HTTP Headers
CSS Animations to technologia, która pozwala na tworzenie dynamicznych efektów wizualnych na stronach internetowych. Umożliwia ona animowanie różnych właściwości CSS, takich jak kolor, położenie, rozmiar czy przezroczystość, w prosty sposób. Dzięki CSS Animations, deweloperzy mogą tworzyć płynne przejścia i efekty bez potrzeby używania JavaScriptu, co zwiększa wydajność i responsywność witryn. Przykładem zastosowania CSS Animations może być animowanie przycisków na stronie, które zmieniają kolor po najechaniu na nie kursorem. Z punktu widzenia dobrych praktyk, warto pamiętać o optymalizacji efektów animacyjnych, aby nie obciążały one zbytnio zasobów przeglądarki. CSS Animations są częścią standardu CSS3, co oznacza, że są szeroko wspierane przez różne przeglądarki i można je łatwo implementować w projektach webowych.

Pytanie 17

Które z poniższych zdań najlepiej określa funkcję zaprzyjaźnioną w ramach klasy?

A. Funkcja, która uruchamia się automatycznie po stworzeniu obiektu
B. Funkcja, która jest statyczna i nie ma możliwości modyfikacji pól klasy
C. Funkcja, która ma dostęp do prywatnych pól i metod klasy, z którą jest zaprzyjaźniona
D. Funkcja, która pozwala na dziedziczenie wielokrotne
Funkcja zaprzyjaźniona (ang. friend function) to funkcja, która ma dostęp do prywatnych i chronionych pól oraz metod klasy, mimo że nie jest jej częścią. Służy do realizacji operacji wymagających bezpośredniego dostępu do wewnętrznych elementów klasy, ale bez naruszania zasad hermetyzacji. Przykład w C++: `class Konto { private: double saldo; friend void wyswietlSaldo(Konto k); }`. Funkcja `wyswietlSaldo` może odczytać pole `saldo`, mimo że jest ono prywatne. Funkcje zaprzyjaźnione są używane, gdy konieczna jest bliska współpraca między klasami lub funkcjami, ale nie chcemy nadmiernie otwierać interfejsu klasy.

Pytanie 18

Jakie czynności należy wykonać, aby zrealizować zdarzenie kliknięcia na przycisk w aplikacji desktopowej?

A. Zaprojektować nowy dialog modalny
B. Powiązać zdarzenie kliknięcia z odpowiednią metodą w kodzie
C. Utworzyć metodę w systemie menu
D. Zmienić plik XAML
Podłączenie zdarzenia kliknięcia do odpowiedniej metody w kodzie to podstawowy krok w obsłudze interakcji użytkownika z przyciskiem w aplikacjach desktopowych. W środowiskach takich jak WPF (Windows Presentation Foundation), WinForms czy Qt, każda kontrolka (np. przycisk) może posiadać przypisaną metodę, która zostanie wywołana w momencie kliknięcia. Dzięki temu możliwe jest wykonywanie operacji, takich jak otwieranie nowych okien, przetwarzanie danych lub aktualizacja interfejsu użytkownika. Prawidłowa implementacja zdarzeń jest kluczowa dla funkcjonalności aplikacji i umożliwia dynamiczne reagowanie na działania użytkownika. W środowiskach takich jak Visual Studio, proces ten jest intuicyjny i często realizowany przez mechanizm 'kliknij i przeciągnij', a następnie przypisanie kodu do wygenerowanego szkieletu funkcji.

Pytanie 19

Wskaż poprawny komentarz jednoliniowy, który można dodać w linii 3 w miejscu znaków zapytania, aby był zgodny ze składnią i opisywał operację przeprowadzaną w tej linii?

string[] langs = {"C++", "C#", "Java", "Python"};
foreach (string i in langs) {
    Console.WriteLine(i);    ???
}
A. // wypełnienie elementu tablicy
B. # wypełnienie elementu tablicy
C. // wyświetlenie elementu tablicy
D. # wyświetlenie elementu tablicy
Odpowiedź // wyswietlenie elementu tablicy jest poprawna, ponieważ komentarze jednoliniowe w języku C# rozpoczynają się od dwóch ukośników: //. W tym przypadku linia Console.WriteLine(i); odpowiedzialna jest za wyświetlenie elementu tablicy na konsoli. Komentarz ten poprawnie opisuje, co robi dana linia kodu, co jest dobrą praktyką w programowaniu, ponieważ ułatwia zrozumienie funkcji kodu innym programistom lub nawet nam samym w przyszłości. Komentarze są szczególnie przydatne, gdy kod jest skomplikowany i wymaga wyjaśnień. Warto zawsze stosować komentarze, by opisywały one istotne fragmenty kodu, co znacząco zwiększa jego czytelność i utrzymywalność. Praktyka dodawania takich opisów jest zgodna z zasadami czystego kodu, które promują czytelność i zrozumiałość. Dzięki takim komentarzom osoby przeglądające kod mogą szybko zorientować się, jakie funkcje pełnią poszczególne jego fragmenty, co usprawnia proces debugowania i dalszego rozwoju oprogramowania.

Pytanie 20

Które z poniższych nie jest narzędziem do zarządzania stanem w aplikacjach React?

A. MobX
B. Webpack
C. Context API
D. Redux
Wybierając odpowiedzi związane z zarządzaniem stanem, warto zaznaczyć, że Redux, MobX oraz Context API to popularne narzędzia wykorzystywane do efektywnego zarządzania stanem w aplikacjach zbudowanych w React. Redux jest biblioteką, która wprowadza wzorzec architektoniczny Flux, umożliwiając centralizację stanu aplikacji. Pozwala to na łatwiejsze śledzenie zmian stanu oraz ich przewidywalność. MobX, z drugiej strony, oferuje bardziej reaktywny i obiektowy model zarządzania stanem, gdzie zmiany stanu są automatycznie śledzone, co upraszcza kod i redukuje złożoność. Context API to natywne rozwiązanie w React, które umożliwia dzielenie się stanem między komponentami bez potrzeby przekazywania propsów przez wszystkie poziomy drzewa komponentów. Często nowi programiści mylą Webpack z narzędziami do zarządzania stanem, co wynika z jego kluczowej roli w ekosystemie React. W rzeczywistości, narzędzia do budowania, takie jak Webpack, koncentrują się głównie na kompilacji i optymalizacji zasobów, a nie na logice i zarządzaniu stanem aplikacji. Zrozumienie różnic między tymi narzędziami jest kluczowe dla prawidłowego projektowania aplikacji i efektywnego wykorzystania dostępnych technologii.

Pytanie 21

Zamieszczony fragment kodu w Android Studio wdraża metodę nasłuchującą dla obsługi zdarzenia:

przycisk = (Button) findViewById(R.id.yes_button);
przycisk.setOnClickListener(new View.OnClickListener() { ... });
A. wybierania daty
B. zmiany stanu kontrolki Switch
C. naciśnięcia przycisku
D. zmiany w polu tekstowym
Kod wykorzystuje metodę setOnClickListener, która jest podstawowym sposobem przypisywania reakcji na kliknięcie przycisku (Button) w Androidzie. To taki klasyczny wzorzec nasłuchiwania zdarzeń, w tym przypadku – kliknięcia użytkownika. Moim zdaniem, ta konstrukcja pojawia się praktycznie w każdym większym projekcie Androidowym, bo trudno sobie wyobrazić interfejs bez przycisków, które coś faktycznie robią. Co ciekawe, korzystając z setOnClickListener, przekazujemy obiekt anonimowej klasy implementującej interfejs View.OnClickListener, a w jej metodzie onClick() umieszczamy kod, który ma się wykonać po naciśnięciu przycisku. To bardzo elastyczne rozwiązanie, bo możemy tu zarówno wyświetlić Toast, przejść do innego activity, wysłać dane do internetu czy nawet ukryć inny widok. Warto pamiętać, że praktycznie wszystkie kontrolki dziedziczące po View mogą mieć własnych listenerów, ale Button to najbardziej naturalny przypadek użycia. To taka podstawa obsługi UI w Android Studio i moim zdaniem każdy, kto chce pisać apki na Androida, powinien mieć to opanowane na pamięć. Dodatkowo, od wersji Android API 26 można używać także lambda expressions, co jeszcze bardziej skraca kod, ale sama idea zostaje ta sama – reagujemy na kliknięcie przycisku.

Pytanie 22

Co to jest git rebase?

A. Metoda tworzenia kopii zapasowej repozytorium
B. Polecenie do tworzenia nowego repozytorium
C. Narzędzie do rozwiązywania konfliktów między plikami
D. Technika integracji zmian z jednej gałęzi do drugiej przez przeniesienie lub połączenie sekwencji commitów
Git rebase to technika stosowana w systemach kontroli wersji, która umożliwia integrację zmian z jednej gałęzi do drugiej poprzez przeniesienie lub połączenie sekwencji commitów. W praktyce, rebase pozwala na 'przeniesienie' commitów z gałęzi roboczej na szczyt gałęzi docelowej, co skutkuje liniowym historią commitów. Taka struktura jest bardziej przejrzysta i ułatwia śledzenie wprowadzonych zmian. Przykładem zastosowania może być sytuacja, gdy pracujesz nad nową funkcjonalnością w gałęzi feature, a w międzyczasie na gałęzi main wprowadzono istotne poprawki. Wykonując rebase na swojej gałęzi feature, możesz szybko zintegrować zmiany z main, co pozwala na uniknięcie problemów z późniejszym scaleniem. Rebase jest zgodny z dobrymi praktykami branżowymi, ponieważ wspiera utrzymanie czystej historii projektu. Należy jednak pamiętać, że rebase zmienia historię, co sprawia, że nie powinno się go stosować na publicznych gałęziach, aby nie komplikować pracy innych deweloperów.

Pytanie 23

Który z wymienionych elementów może stanowić część menu w aplikacji desktopowej?

A. ScrollBar
B. Canvas
C. CheckBox
D. MenuItem
CheckBox to komponent, który umożliwia wybór jednej lub wielu opcji, ale nie jest częścią systemu menu – zwykle znajduje się w formularzach lub ustawieniach aplikacji. ScrollBar to element interfejsu umożliwiający przewijanie treści w oknie aplikacji, ale nie jest elementem menu. Canvas to kontener do rysowania elementów graficznych i obiektów, ale nie pełni funkcji w kontekście tworzenia menu aplikacji desktopowych.

Pytanie 24

Szablon MojaTablica oferuje funkcjonalność tablicy z indeksami oraz elementami różnych typów. W oparciu o pokazany kod, który wykorzystuje ten szablon do tworzenia tablicy asocjacyjnej, wskaż definicję, która posługuje się szablonem do zainicjowania tablicy, gdzie indeksami są liczby całkowite, a elementami są napisy?

MojaTablica tab1 = new MojaTablica<string, string>();
tab1["good"] = "dobry";
A. int tab2[] = new MojaTablica()
B. MojaTablica tab2 = new MojaTablica()
C. int tab2 = new MojaTablica()
D. MojaTablica tab2 = MOjaTablica()
Deklaracja int tab2[] = new MojaTablica(); jest nieprawidłowa, ponieważ int odnosi się do typów prostych, a nie do tablic asocjacyjnych. MojaTablica tab2 = MOjaTablica(); zawiera literówkę i nie inicjalizuje nowego obiektu. Int tab2 = new MojaTablica(); jest błędne, ponieważ tablica asocjacyjna nie może być przypisana do typu int – wymaga użycia typu zgodnego z definicją szablonu.

Pytanie 25

Jaki kod może być związany z treścią wygenerowaną w trakcie działania programu Java?

Exception in thread "main" java.lang.ArithmeticException: / by zero
A. x = tablica[6];
B. x = x % y;
C. if (x > y) ...
D. x = 0;
Pojawienie się komunikatu Exception in thread "main" java.lang.ArithmeticException: / by zero jest jednoznacznie powiązane z próbą wykonania operacji dzielenia lub modulo przez zero. Tymczasem nie każda operacja na liczbach czy tablicach w Javie prowadzi do takiego wyjątku. Przypisanie wartości do zmiennej, jak x = 0;, jest zupełnie bezpieczne i nie generuje żadnego wyjątku – to po prostu podstawowa operacja inicjalizacji. Podobnie konstrukcja warunkowa typu if (x > y) … sama w sobie nie wykonuje żadnych operacji arytmetycznych, a jedynie porównuje wartości. Tego rodzaju instrukcja nie może wygenerować ArithmeticException, bo nie ma tu dzielenia ani reszty z dzielenia. Często jednak intuicyjnie myli się wyjątki arytmetyczne z błędami związanymi z dostępem do elementów tablicy. Na przykład zapis x = tablica[6]; może prowadzić do IndexOutOfBoundsException, jeśli tablica ma mniej niż 7 elementów, ale to zupełnie inny typ błędu – dotyczy zakresu tablicy, a nie arytmetyki. Z mojego doświadczenia wynika, że taki błąd logiczny pojawia się, gdy programiści nie rozróżniają rodzajów wyjątków lub nie zapoznają się dokładnie z komunikatami błędów. Branżowym standardem jest zawsze analizować dokładnie stack trace błędów i rozróżniać, które operacje mogą generować jakie wyjątki, bo to pozwala lepiej projektować logikę obsługi błędów w aplikacjach. W Javie ArithmeticException to sygnał, że coś poszło nie tak z działaniem matematycznym, a nie z dostępem do pamięci czy porównywaniem wartości. Warto więc poświęcić chwilę na zrozumienie tego rozróżnienia – to się później bardzo opłaca w praktyce.

Pytanie 26

Jakie znaczenie ma framework w kontekście programowania?

A. Zbiór gotowych bibliotek, narzędzi i zasad ułatwiających tworzenie aplikacji
B. System operacyjny, który umożliwia uruchamianie aplikacji
C. Program do graficznego projektowania interfejsów użytkownika
D. Moduł do zarządzania systemami baz danych
Framework to zbiór gotowych bibliotek, narzędzi i reguł, które wspierają tworzenie aplikacji poprzez dostarczanie struktury ułatwiającej pracę programistów. Frameworki definiują standardowe komponenty aplikacji, umożliwiając programistom skoncentrowanie się na logice biznesowej zamiast na podstawowej architekturze aplikacji. Przykłady popularnych frameworków to .NET, Angular, Django i Spring. Frameworki przyspieszają proces programowania, poprawiają jakość kodu i wspierają skalowalność aplikacji, co czyni je nieodłącznym elementem nowoczesnego programowania.

Pytanie 27

Jaki tekst zostanie wyświetlony po uruchomieniu jednego z poniższych fragmentów kodu?
Kod w React:

<h2>{2+2}</h2>
Kod w Angular:
<h2>{{2+2}}</h2>
A. {{2+2}}
B. 4
C. {2+2}
D. {4}
Wiele osób trafia na problem, bo te klamry i podwójne klamry wyglądają trochę tajemniczo, zwłaszcza przy pierwszym kontakcie z Reactem albo Angularem. Często pojawia się myślenie, że skoro w szablonie wpisano {2+2} albo {{2+2}}, to właśnie taki tekst zostanie wyświetlony na stronie, dosłownie z klamrami. W praktyce jednak i React (JSX), i Angular traktują klamry jako specjalną składnię do osadzania dynamicznych wartości z JavaScript — to nie jest zwykła dekoracja, tylko wyraźny sygnał dla silnika, że w tym miejscu należy wykonać kod i podstawić wynik. To powoduje, że nie wyświetli się ani „{2+2}”, ani „{{2+2}}”, tylko właśnie wynik tego wyrażenia. Co ciekawe, odpowiedź „{4}” też jest błędna, bo React i Angular nie wyświetlają już klamer w efekcie końcowym — klamry są tylko częścią składni, nie wyniku. Człowiek łatwo może się pomylić, bo w zwykłym HTML czegoś takiego nie ma i klamry są po prostu tekstem. Moim zdaniem często wynika to z niezrozumienia, jak działa tzw. data binding w frameworkach frontendowych. Warto wyrobić sobie nawyk myślenia o klamrach jako narzędziu do „wstrzykiwania” wartości, nie jako części tekstu. To też pokazuje, jak ważne jest czytanie dokumentacji — oficjalne materiały Reacta i Angulara bardzo wyraźnie podkreślają, że klamry służą do oceny JavaScriptu. Jeśli więc widzimy {2+2} w szablonie, przeglądarka zobaczy tylko „4”, bo wszystko, co w klamrach, jest oceniane przed wyświetleniem. Jeśli wpiszemy tam zmienną lub nawet funkcję, efekt będzie podobny — zawsze podstawiona zostanie końcowa wartość, a nie kod czy same klamry. Takie mechanizmy bardzo upraszczają pracę, bo pozwalają łatwo aktualizować widok w zależności od stanu aplikacji.

Pytanie 28

Jakie jest kluczowe działanie przy opracowywaniu zbiorów danych do rozwiązania problemu programistycznego?

A. Realizacja algorytmu sortującego
B. Wybór odpowiednich struktur danych
C. Zmiana języka programowania na bardziej wydajny
D. Weryfikacja zbiorów danych przed ich zastosowaniem
Implementacja algorytmu sortującego jest ważna, ale to właśnie nie jest ten najważniejszy moment w pracy z danymi – raczej końcowy etap. Zmiana języka programowania oczywiście może wpłynąć na wydajność, ale pamiętaj, że to struktury danych są kluczowe dla efektywności programu, niezależnie od wybranego języka. Testowanie zestawów danych to istotna część sprawdzania projektu, ale samo testowanie nie zastąpi dobrze przemyślanego doboru struktur danych na początku całego procesu. Bez tego trudno o dobry efekt.

Pytanie 29

Metodyka zwinna (ang. agile) opiera się na

A. dekompozycji przedsięwzięcia na elementy, które są niezależnie projektowane, wytwarzane i testowane w krótkich iteracjach
B. podzieleniu projektu na kolejne etapy: planowanie, programowanie, testowanie, z ciągłym oszacowaniem ryzyka projektu
C. zaplanowaniu całej aplikacji na początku projektu i jej tworzeniu na przemian z testowaniem
D. przygotowaniu testów dla całego projektu, a następnie wprowadzaniu kolejnych jego fragmentów
Podejście kaskadowe (waterfall) zakłada podział projektu na kolejne etapy (projekt, programowanie, testy), ale nie dopuszcza powrotu do wcześniejszych faz, co czyni je mniej elastycznym niż agile. Projektowanie całej aplikacji na początku jest charakterystyczne dla tradycyjnych metodyk, takich jak V-model, ale nie odzwierciedla idei iteracyjnego rozwoju stosowanego w agile. Implementowanie testów po zakończeniu całości projektu ogranicza możliwość szybkiego reagowania na błędy i jest sprzeczne z filozofią agile, gdzie testy są integralną częścią każdego etapu iteracji.

Pytanie 30

Jakiego rodzaju zmiennej użyjesz w C++, aby przechować wartość "true"?

A. tekst
B. liczba zmiennoprzecinkowa
C. liczba całkowita
D. bool
Typ danych 'bool' w języku C++ jest przeznaczony do przechowywania wartości 'true' lub 'false'. Deklaracja 'bool isReady = true;' to przykład poprawnego przypisania wartości logicznej do zmiennej. Typ boolean jest kluczowy w warunkach decyzyjnych, pętlach i operacjach porównawczych. W programowaniu typ 'bool' jest wykorzystywany do kontroli przepływu programu, obsługi wyjątków oraz sprawdzania poprawności danych. Użycie booleanów w kodzie zwiększa jego czytelność i pozwala na bardziej przejrzyste budowanie logiki aplikacji.

Pytanie 31

Jakie są kluczowe różnice pomiędzy strukturą (struct) a unią (union) w języku C?

A. Struktura przechowuje wiele wartości równocześnie, unia tylko jedną
B. Unia nie jest obsługiwana przez kompilatory współczesnych języków
C. Struktura wymaga więcej miejsca w pamięci niż unia
D. Unia umożliwia dynamiczne przypisywanie typów danych, struktura natomiast nie
Główna różnica między strukturą ('struct') a unią ('union') w języku C polega na sposobie przechowywania danych. Struktura przechowuje wszystkie pola jednocześnie, przydzielając każdemu z nich osobne miejsce w pamięci, natomiast unia używa wspólnej przestrzeni pamięci dla wszystkich swoich pól – w danym momencie można przechowywać tylko jedną wartość. Unia jest bardziej efektywna pod względem pamięci, ale mniej wszechstronna, ponieważ zmiana wartości jednego pola nadpisuje pozostałe. Struktury są powszechnie wykorzystywane w aplikacjach, gdzie konieczne jest przechowywanie wielu niezależnych danych, podczas gdy unie są używane do oszczędzania pamięci.

Pytanie 32

Które z poniższych twierdzeń najlepiej charakteryzuje metodę wirtualną?

A. Metoda, która jest zawsze stosowana w konstruktorach danej klasy
B. Metoda, która może być wywoływana tylko przez klasę nadrzędną
C. Metoda, która może być przesłonięta w klasie dziedziczącej
D. Metoda, która działa wyłącznie dla statycznych pól danej klasy
Metoda, która może być wywoływana tylko przez klasę bazową to raczej metoda prywatna lub chroniona, a nie wirtualna. Metody statyczne są związane z klasą, a nie z konkretnymi obiektami, więc nie można ich tak po prostu nadpisać w klasie pochodnej. A tak w ogóle, metody w konstruktorach zazwyczaj nie są wirtualne, bo wywołanie metod wirtualnych w konstruktorze może prowadzić do dziwnych rzeczy – w konstruktorze klasy bazowej składowe klasy pochodnej jeszcze nie są gotowe.

Pytanie 33

Który element dokumentacji technicznej jest istotny dla ustalenia metod ochrony danych w aplikacji?

A. Opis architektury klient-serwer
B. Harmonogram zarządzania zadaniami
C. System ochrony aplikacji
D. Koncepcja interfejsu użytkownika
Plan zarządzania zadaniami koncentruje się na harmonogramie i podziale pracy, ale nie odnosi się do ochrony danych. Opis architektury klient-serwer dotyczy modelu komunikacji między aplikacją a serwerem, ale nie precyzuje mechanizmów zabezpieczeń. Projekt interfejsu użytkownika jest kluczowy dla doświadczeń użytkowników, ale nie obejmuje bezpośrednich mechanizmów ochrony danych i aplikacji, które są uwzględniane w specyfikacji systemu zabezpieczeń.

Pytanie 34

Jakiego typu funkcja jest tworzona poza klasą, ale ma dostęp do jej prywatnych i chronionych elementów?

A. Funkcja zaprzyjaźniona
B. Metoda statyczna
C. Konstruktor
D. Destruktor
Konstruktor jest specjalnym typem metody klasy, który służy do inicjalizacji obiektów i nie ma dostępu do prywatnych składowych innej klasy, chyba że jest ona klasą zaprzyjaźnioną. Metoda statyczna należy do klasy jako całości i może być wywoływana bez tworzenia instancji obiektu, ale nie posiada dostępu do prywatnych lub chronionych składowych klasy, ponieważ działa w kontekście klasy, a nie instancji. Destruktor, z kolei, jest odpowiedzialny za czyszczenie zasobów po zniszczeniu obiektu i nie posiada funkcjonalności pozwalającej na dostęp do prywatnych danych innej klasy, o ile nie jest ona zaprzyjaźniona.

Pytanie 35

Co będzie wynikiem wykonania poniższego kodu w języku C#?

string text = "hello world";
var result = string.Join("", text.Split(' ').Select(s => char.ToUpper(s[0]) + s.Substring(1)));
Console.WriteLine(result);
A. helloworld
B. HELLO WORLD
C. Hello World
D. HelloWorld
Wynikiem wykonania kodu nie jest 'HELLO WORLD', a przyczyna tego nieporozumienia tkwi w sposobie przetwarzania tekstu. Warto zauważyć, że kod nie wykonuje prostej konwersji wszystkich liter na wielkie, jak sugeruje ta odpowiedź. Zamiast tego, każda pierwsza litera każdego słowa jest zmieniana na wielką, a pozostałe litery pozostają w oryginalnym stanie, co w przypadku 'hello world' daje wyrażenie 'Hello World'. To zrozumienie jest kluczowe w programowaniu, ponieważ często błędnie zakładamy, że transformacje na tekstach działają w sposób jednorodny. Inną niepoprawną odpowiedzią jest 'helloworld', która również pomija konwersję pierwszych liter na wielkie, co jest kluczowym aspektem działania kodu. Warto rozważyć, że przy pracy z tekstami w C# istotne są szczegóły, takie jak wielkość liter, a dobre praktyki programistyczne wymagają zrozumienia, jak funkcje manipulujące tekstem działają. Niepoprawne odpowiedzi często wynikają z niezrozumienia schematu, jakim jest łączenie, a nie tylko konwersji liter. Użytkownicy powinni zawsze testować swoje założenia poprzez praktyczne próby w kodowaniu, aby unikać takich nieporozumień.

Pytanie 36

Programista tworzy system zarządzania buforem drukowania dokumentów. Najnowsze zlecenie drukowania dodawane jest na koniec kolejki, a najstarsze z nich są przekazywane do drukarki. Jaką strukturę danych najłatwiej zastosować w tej sytuacji?

A. FIFO
B. Sterta
C. LIFO
D. Stos
Stos (LIFO - Last In, First Out) działa odwrotnie – najnowsze zadanie jest przetwarzane jako pierwsze, co nie odpowiada kolejności drukowania. Sterta to inna struktura danych używana głównie do dynamicznej alokacji pamięci, a nie do zarządzania kolejkami zadań. LIFO nie nadaje się do implementacji kolejki wydruku, ponieważ najstarsze zadania mogą pozostawać nieprzetworzone, co prowadzi do nieefektywności i dezorganizacji procesów drukowania.

Pytanie 37

Jakie jest fundamentalne zagadnienie w projektowaniu aplikacji w architekturze klient-serwer?

A. Przeniesienie wszystkich obliczeń na stronę klienta
B. Użycie serwera jako głównego miejsca przetwarzania danych
C. Funkcjonowanie aplikacji wyłącznie w trybie offline
D. Brak podziału na role klienta i serwera
Użycie serwera jako centralnego miejsca przetwarzania danych jest kluczowym elementem architektury klient-serwer. Serwer pełni rolę centralnego punktu, który zarządza żądaniami klientów, przechowuje dane i zapewnia odpowiedzi na zapytania. Taki model zapewnia większe bezpieczeństwo danych, ułatwia zarządzanie zasobami i umożliwia skalowanie aplikacji w miarę wzrostu liczby użytkowników. Architektura klient-serwer jest szeroko stosowana w aplikacjach webowych, systemach bankowych oraz usługach chmurowych, gdzie konieczna jest centralizacja danych i ich ochrona.

Pytanie 38

Dziedziczenie jest używane, gdy zachodzi potrzeba

A. określenia zasięgu dostępności metod i pól danej klasy
B. wykorzystania stałych wartości, niezmieniających się w trakcie działania aplikacji
C. asynchronicznej realizacji długotrwałych zadań
D. sformułowania klasy bardziej szczegółowej niż już stworzona
Często zdarza się, że osoby uczące się programowania mylą dziedziczenie z innymi pojęciami, takimi jak asynchroniczność czy zarządzanie stałymi. Zacznijmy od tego, że asynchroniczna realizacja długotrwałych zadań to zupełnie inny temat – tutaj chodzi o wielowątkowość, operacje asynchroniczne czy użycie mechanizmów typu async/await, które pozwalają na nieblokujące wykonywanie operacji, np. zapytania do bazy czy pobieranie plików z sieci. Dziedziczenie nie ma z tym absolutnie nic wspólnego. Jeżeli chodzi o stałe wartości, to są one definiowane zazwyczaj przy pomocy słów kluczowych takich jak "const" czy "final" albo przez odpowiednią konfigurację, a nie przez dziedziczenie. To raczej kwestia zarządzania niezmiennymi danymi w klasach, nie ich rozszerzania. No i jeszcze kwestia zasięgu dostępności metod oraz pól – tutaj w grę wchodzą modyfikatory dostępu, takie jak public, private czy protected. To one decydują, co jest widoczne na zewnątrz klasy, a nie sam mechanizm dziedziczenia. W sumie, często widzę, że osoby początkujące próbują wykorzystać dziedziczenie do rozwiązywania problemów, które są dużo lepiej adresowane przez inne mechanizmy języka. Najczęstszy błąd myślowy to uznawanie dziedziczenia za narzędzie "do wszystkiego" – a ono ma swoje bardzo konkretne, logiczne zastosowanie, głównie wtedy, gdy tworzysz strukturę klas od ogólnych do coraz bardziej szczegółowych. Po prostu warto od początku rozumieć, że dziedziczenie służy dokładnie temu – organizacji kodu wokół wspólnych cech i zachowań, nie zaś rozwiązywaniu każdego problemu napotkanego w kodzie.

Pytanie 39

W pokazanych fragmentach kodu zdefiniowano funkcję o nazwie fun1. W tej funkcji należy zaimplementować obsługę. Fragment kodu interfejsu użytkownika (XAML):

<RadioButton Content="opcja1" />
<RadioButton Content="opcja2" />
<Button Content="OK" Width=75 Click="fun1"/>
Fragment kodu logiki programu (C#):
private void fun1(object sender, RoutedEventArgs e) { ... }
A. inicjacji elementów interfejsu użytkownika
B. usunięcia kontrolek z pamięci RAM
C. naciśnięcia przycisku zatwierdzającego dialog
D. aplikacji po wystąpieniu zdarzenia utraty fokusu przez pole opcji
Obsługa zdarzeń utraty focusa dotyczy pól tekstowych i formularzy, a nie przycisków zatwierdzających dialog. Inicjalizacja elementów interfejsu użytkownika jest wykonywana na etapie ładowania aplikacji, a nie w odpowiedzi na interakcję z przyciskiem. Usuwanie kontrolek z pamięci jest ważnym elementem zarządzania zasobami, ale nie ma związku z obsługą zdarzeń przycisków dialogowych. Każda z tych operacji dotyczy innego etapu cyklu życia aplikacji i nie odnosi się bezpośrednio do zatwierdzania danych przez użytkownika.

Pytanie 40

Programista może wykorzystać framework Angular do realizacji aplikacji:

A. rodzaju front-end
B. rodzaju back-end
C. mobilnej
D. na komputerze
Angular to świetne narzędzie do tworzenia aplikacji front-endowych. Chodzi o to, że odpowiada za to, co widzi użytkownik i jak może z tym interagować. Dzięki Angular możemy budować dynamiczne i responsywne aplikacje webowe. Z tego co widzę, używamy tam komponentów, modułów i rzeczy typu dwukierunkowe wiązanie danych, co naprawdę ułatwia życie. Bez wątpienia, Angular jest jednym z najpopularniejszych frameworków do robienia interfejsów użytkownika, co tylko potwierdza jego efektywność.