„Kliensalkalmazások” változatai közötti eltérés
Órák anyagának és segédanyagoknak a hozzáadása |
a →Értékelés: Ponthatárok sablonba foglalása |
||
| 45. sor: | 45. sor: | ||
Vizsga: max. 60 pont | Vizsga: max. 60 pont | ||
=== Értékelés=== | === Értékelés=== | ||
{{Jegykonvertálás|0 – 49|50 – 61|62 – 74|75 – 87|88 – 100 | |||
}} | |||
==Tematika== | ==Tematika== | ||
| 64. sor: | 61. sor: | ||
**Habár a diasoron én nem láttam magyarázatot a <code>@media only screen</code> query és a <code>min-width</code> használatára, [[Kliensalkalmazások kvíz#Mire való egy @media screen and (min-width: 1100px) CSS-query?|a vizsgán kérdezik]]. De legalább az egyik laboron [https://bmeviaubb03.github.io/laborok/laborok/web/02-css/#reszponziv-elrendezes szó esik róla]. | **Habár a diasoron én nem láttam magyarázatot a <code>@media only screen</code> query és a <code>min-width</code> használatára, [[Kliensalkalmazások kvíz#Mire való egy @media screen and (min-width: 1100px) CSS-query?|a vizsgán kérdezik]]. De legalább az egyik laboron [https://bmeviaubb03.github.io/laborok/laborok/web/02-css/#reszponziv-elrendezes szó esik róla]. | ||
*[[Média:Kliens E04 20240304 JavaScript 1. rész.pdf|4. hét (Gincsai Gábor)]]: JavaScript: transpiler, összehasonlítás (Java), nyelvi elemek, változók, (logikai) típusok (konverzió), értékadás (strict), konstans, alapértelmezett érték, feltételes futtatás, objektumok, JSON (parse, stringify), tömbök, függvények, window, global scope pollution, scopes (shadowing); DOM: <code>querySelector[All]()</code>, <code>createElement()</code>, <code>textContent()</code>, <code>appendChild()</code>, <code>setAttribute()</code>, <code>firstChild()</code>, <code>nextSibling()</code>; eseménykezelés: <code>addEventListener()</code>, bubble, <code>stopPropagation()</code>; session / local storage: <code>setItem()</code>, <code>getItem()</code>, <code>removeItem()</code>, <code>clear()</code>; closure, self-invoking / arrow (lambda) function, modul; <code>new</code>, <code>this</code>; prototípus, konstruktor, factory method, <code>class</code>, string interpolation, öröklés; folytatás a laboron: [[Média:Kliens E05 20240311 JavaScript 2. rész.pdf|Promise]]: ... | *[[Média:Kliens E04 20240304 JavaScript 1. rész.pdf|4. hét (Gincsai Gábor)]]: JavaScript: transpiler, összehasonlítás (Java), nyelvi elemek, változók, (logikai) típusok (konverzió), értékadás (strict), konstans, alapértelmezett érték, feltételes futtatás, objektumok, JSON (parse, stringify), tömbök, függvények, window, global scope pollution, scopes (shadowing); DOM: <code>querySelector[All]()</code>, <code>createElement()</code>, <code>textContent()</code>, <code>appendChild()</code>, <code>setAttribute()</code>, <code>firstChild()</code>, <code>nextSibling()</code>; eseménykezelés: <code>addEventListener()</code>, bubble, <code>stopPropagation()</code>; session / local storage: <code>setItem()</code>, <code>getItem()</code>, <code>removeItem()</code>, <code>clear()</code>; closure, self-invoking / arrow (lambda) function, modul; <code>new</code>, <code>this</code>; prototípus, konstruktor, factory method, <code>class</code>, string interpolation, öröklés; folytatás a laboron: [[Média:Kliens E05 20240311 JavaScript 2. rész.pdf|Promise]]: ... | ||
**Megjegyzés a 44. diához: habár a diasoron én nem láttam magyarázatot a <code>confirm()</code> függvény használatára, [[Kliensalkalmazások kvíz#A confirm() JS-függvény aszinkron.|a vizsgán kérdezik]]. De legalább az egyik laboron [https://bmeviaubb03.github.io/laborok/laborok/web/03-js/#:~:text=%C3%89rdekess%C3%A9g%20a%20confirm()%20f%C3%BCggv%C3%A9ny,%20amely%20b%C3%B6ng%C3%A9sz%C5%91ben%20nat%C3%ADvan%20implement%C3%A1lt: szó esik róla] – érdekességként. | ** Megjegyzés a 44. diához: habár a diasoron én nem láttam magyarázatot a <code>confirm()</code> függvény használatára, [[Kliensalkalmazások kvíz#A confirm() JS-függvény aszinkron.|a vizsgán kérdezik]]. De legalább az egyik laboron [https://bmeviaubb03.github.io/laborok/laborok/web/03-js/#:~:text=%C3%89rdekess%C3%A9g%20a%20confirm()%20f%C3%BCggv%C3%A9ny,%20amely%20b%C3%B6ng%C3%A9sz%C5%91ben%20nat%C3%ADvan%20implement%C3%A1lt: szó esik róla] – érdekességként. | ||
**Megjegyzések a 103. diához: | **Megjegyzések a 103. diához: | ||
***Arrow functionöket <code>const</code>-tal érdemes definiálni, mivel általában nem változik a tartalmuk. | ***Arrow functionöket <code>const</code>-tal érdemes definiálni, mivel általában nem változik a tartalmuk. | ||
***Az ''Objektum nem adható vissza simán'' pontban szándékosan hibás változódeklarációk szerepelnek. | *** Az ''Objektum nem adható vissza simán'' pontban szándékosan hibás változódeklarációk szerepelnek. | ||
*[[Média:Kliens ea4 2023 web.pdf|5. hét (Albert István)]]: TypeScript: transpiler, static typing (<code>any</code>, <code>noImplicitAny</code>), structural typing, deklaráció (<code>var</code>, <code>let</code>, <code>const</code>), <code>null</code> (<code>strictNullChecks</code>), <code>undefined</code>, type narrowing / assertion, non-null assertion, optional chaining, null coalescing, enum (sorszámozás), string / number literal (union), type annotation / alias, optional values, <code>interface</code>; <code>class</code>: <code>static</code>, constructor, <code>readonly</code>, <code>protected</code>, <code>extends</code>, <code>super</code>, <code>private</code>, erősen védett mező; [https://www.typescriptlang.org/docs/handbook/2/functions.html#function-overloads function overload] signatures, generic types, típuskényszer, metszettípus, spread, dekorátorok; modulok: <code>export</code>, <code>import</code>, típusdeklarációs fájl (<code>.d.ts</code>) | *[[Média:Kliens ea4 2023 web.pdf|5. hét (Albert István)]]: TypeScript: transpiler, static typing (<code>any</code>, <code>noImplicitAny</code>), structural typing, deklaráció (<code>var</code>, <code>let</code>, <code>const</code>), <code>null</code> (<code>strictNullChecks</code>), <code>undefined</code>, type narrowing / assertion, non-null assertion, optional chaining, null coalescing, enum (sorszámozás), string / number literal (union), type annotation / alias, optional values, <code>interface</code>; <code>class</code>: <code>static</code>, constructor, <code>readonly</code>, <code>protected</code>, <code>extends</code>, <code>super</code>, <code>private</code>, erősen védett mező; [https://www.typescriptlang.org/docs/handbook/2/functions.html#function-overloads function overload] signatures, generic types, típuskényszer, metszettípus, spread, dekorátorok; modulok: <code>export</code>, <code>import</code>, típusdeklarációs fájl (<code>.d.ts</code>) | ||
**Az 52. dián az utolsó szöveges bekezdés pontosabban: ''míg a JavaScript tetszőleges típuson, a TypeScript csak <code>number</code>-ön tud <code>toString</code>-et hívni''. | **Az 52. dián az utolsó szöveges bekezdés pontosabban: ''míg a JavaScript tetszőleges típuson, a TypeScript csak <code>number</code>-ön tud <code>toString</code>-et hívni''. | ||
| 75. sor: | 72. sor: | ||
====Android==== | ====Android==== | ||
*8. hét: ''szünet'' | * 8. hét: ''szünet'' | ||
*[[Média:Kliens ea 09 20240408.pdf|9. hét (Gazdi László)]]: alapok, Java; <code>View</code> (XML): <code>TextView</code>; eseménykezelés, Kotlin; '''<code>Activity</code>, <code>Service</code>, <code>ContentProvider</code>, <code>BroadcastReceiver</code>;''' manifest, erőforrások; <code>.dex</code> compiler (Dalvik bytecode), <code>.apk</code>; '''activity lifecycle''' (callback függvények, állapot mentése, váltás) | *[[Média:Kliens ea 09 20240408.pdf|9. hét (Gazdi László)]]: alapok, Java; <code>View</code> (XML): <code>TextView</code>; eseménykezelés, Kotlin; '''<code>Activity</code>, <code>Service</code>, <code>ContentProvider</code>, <code>BroadcastReceiver</code>;''' manifest, erőforrások; <code>.dex</code> compiler (Dalvik bytecode), <code>.apk</code>; '''activity lifecycle''' (callback függvények, állapot mentése, váltás) | ||
**Megjegyzések a 16. diához: | **Megjegyzések a 16. diához: | ||
***Az OS X már 2016 óta macOS. | ***Az OS X már 2016 óta macOS. | ||
***A [[wikipedia:Cocoa Touch|Cocoa Touch]] helyett már 2019 óta [[wikipedia:SwiftUI|SwiftUI]] van. | *** A [[wikipedia:Cocoa Touch|Cocoa Touch]] helyett már 2019 óta [[wikipedia:SwiftUI|SwiftUI]] van. | ||
***Az [[wikipedia:Interface Builder|Interface Builder]] már 2010 óta az [[wikipedia:Xcode|Xcode]] része. | ***Az [[wikipedia:Interface Builder|Interface Builder]] már 2010 óta az [[wikipedia:Xcode|Xcode]] része. | ||
*[[Média:Kliens ea 10 20240415.pdf|10. hét (Gazdi László)]]: '''<code>Activity</code>''': back stack, vezérlés; <code>Intent</code>: típusai, részei, explicit / implicit, extras, képességek, filter; <code>startActivityForResult()</code>, <code>onActivityResult()</code>; erőforrások: i18n, <code>res/drawable</code>, <code>/layout</code>, <code>/value</code>; UI: <code>viewBinding</code>; dpi, <code>dp</code>, <code>sp</code>; <code>LinearLayout</code>, <code>RelativeLayout</code>, <code>ConstraintLayout</code>; padding és margin | *[[Média:Kliens ea 10 20240415.pdf|10. hét (Gazdi László)]]: '''<code>Activity</code>''': back stack, vezérlés; <code>Intent</code>: típusai, részei, explicit / implicit, extras, képességek, filter; <code>startActivityForResult()</code>, <code>onActivityResult()</code>; erőforrások: i18n, <code>res/drawable</code>, <code>/layout</code>, <code>/value</code>; UI: <code>viewBinding</code>; dpi, <code>dp</code>, <code>sp</code>; <code>LinearLayout</code>, <code>RelativeLayout</code>, <code>ConstraintLayout</code>; padding és margin | ||
| 106. sor: | 103. sor: | ||
===Web=== | ===Web=== | ||
==== 2023. tavasz ==== | ==== 2023. tavasz==== | ||
*Mintavizsga | *Mintavizsga | ||
**''Mi az a TypeScript-dekorátor? Milyen szintaktikával használjuk?'' (kifejtős) | **''Mi az a TypeScript-dekorátor? Milyen szintaktikával használjuk?'' (kifejtős) | ||
***kb. ugyanaz, mint Pythonban | *** kb. ugyanaz, mint Pythonban | ||
***módosítani lehet vele egy osztályt vagy annak tagjainak működését | ***módosítani lehet vele egy osztályt vagy annak tagjainak működését | ||
***pl.:<syntaxhighlight lang="ts" line="1"> | ***pl.:<syntaxhighlight lang="ts" line="1"> | ||
| 133. sor: | 130. sor: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==== 2024. tavasz ==== | ====2024. tavasz==== | ||
*A vizsga kifejtős kérdései | *A vizsga kifejtős kérdései | ||
**''Mik az overload szignatúrák? Hogyan kell őket használni?'' | ** ''Mik az overload szignatúrák? Hogyan kell őket használni?'' | ||
***egy függvénynek többféle számú és típusú bemeneti változóját lehet velük definiálni | ***egy függvénynek többféle számú és típusú bemeneti változóját lehet velük definiálni | ||
***pl. az alábbi kód első két sorában:<syntaxhighlight lang="ts" line="1"> | ***pl. az alábbi kód első két sorában:<syntaxhighlight lang="ts" line="1"> | ||
| 182. sor: | 179. sor: | ||
****nem tölti ki a szülőjének teljes szélességét | ****nem tölti ki a szülőjének teljes szélességét | ||
****ugyanabban a sorban jelenik meg | ****ugyanabban a sorban jelenik meg | ||
***** így lehet formázni linkeket, vagy pl. highlightolni (kihúzni) szöveget | *****így lehet formázni linkeket, vagy pl. highlightolni (kihúzni) szöveget | ||
*****csak a tagen belüli szövegre vonatkozik | *****csak a tagen belüli szövegre vonatkozik | ||
**''Mire valóak az űrlapok?'' | **''Mire valóak az űrlapok?'' | ||
| 194. sor: | 191. sor: | ||
***általában GET vagy POST queryt hajt végre az oldal a beküldés után | ***általában GET vagy POST queryt hajt végre az oldal a beküldés után | ||
****pl. egy mögöttes adatbázisból lehet lekérni, vagy abban módosítani adatokat | ****pl. egy mögöttes adatbázisból lehet lekérni, vagy abban módosítani adatokat | ||
**''Mire való egy űrlap elemeiben a <code>name</code> attribútum?'' | ** ''Mire való egy űrlap elemeiben a <code>name</code> attribútum?'' | ||
***egyes beviteli mezők elnevezésére | ***egyes beviteli mezők elnevezésére | ||
****az űrlap beküldésekor a kliens ezeket használja a szervernek küldött adatok megnevezésére | ****az űrlap beküldésekor a kliens ezeket használja a szervernek küldött adatok megnevezésére | ||
| 205. sor: | 202. sor: | ||
***kizárólag a hozzá tartozó JavaScript-fájl típusinformációit tartalmazza | ***kizárólag a hozzá tartozó JavaScript-fájl típusinformációit tartalmazza | ||
***gyakorlatilag ugyanaz, mint Pythonban a [https://typing.readthedocs.io/en/latest/source/stubs.html type stub] – bár a TypeScript fordításidőben jelzi a típusokkal kapcsolatos problémákat (Pythonban ezeket csak az IDE mutatja) | ***gyakorlatilag ugyanaz, mint Pythonban a [https://typing.readthedocs.io/en/latest/source/stubs.html type stub] – bár a TypeScript fordításidőben jelzi a típusokkal kapcsolatos problémákat (Pythonban ezeket csak az IDE mutatja) | ||
**''Milyen előnyei vannak a dependency injection használatának?'' | ** ''Milyen előnyei vannak a dependency injection használatának?'' | ||
*** separation of concerns | ***separation of concerns | ||
**** az injektor a felelős a dependency létrehozásáért, életciklusáért | ****az injektor a felelős a dependency létrehozásáért, életciklusáért | ||
***** teljesen független a dependency életciklusa a komponensétől | *****teljesen független a dependency életciklusa a komponensétől | ||
****** újrafelhasználható | ******újrafelhasználható | ||
***** csak az injektornak kell ismernie a függőségi gráfot | *****csak az injektornak kell ismernie a függőségi gráfot | ||
**** erősebb dekompozíció | ****erősebb dekompozíció | ||
***** jobb tesztelhetőség | *****jobb tesztelhetőség | ||
***** a komponens kódja így rövidebb lesz | *****a komponens kódja így rövidebb lesz | ||
**''Mire szolgál az Angular <code>[https://angular.dev/api/common/NgIf?tab=description ngIf]</code> direktívája?'' | **''Mire szolgál az Angular <code>[https://angular.dev/api/common/NgIf?tab=description ngIf]</code> direktívája?'' | ||
***elemek feltételes megjelenítésére | ***elemek feltételes megjelenítésére | ||
***pl.:<syntaxhighlight lang="ng2" line="1"> | ***pl.:<syntaxhighlight lang="ng2" line="1"> | ||
| 222. sor: | 219. sor: | ||
</p> | </p> | ||
</div> | </div> | ||
</syntaxhighlight> | </syntaxhighlight> | ||
***az <code>*ngIf</code> attribútumban található kifejezést értékeli ki | ***az <code>*ngIf</code> attribútumban található kifejezést értékeli ki | ||
****itt a komponens <code>.ts</code> fájljában található változókra (is) hivatkozhatunk, melyekre adatkötést hoz létre | **** itt a komponens <code>.ts</code> fájljában található változókra (is) hivatkozhatunk, melyekre adatkötést hoz létre | ||
****ha az értéke <code>true</code>, megjeleníti az elemet | ****ha az értéke <code>true</code>, megjeleníti az elemet | ||
****ha <code>false</code>, törli a teljes elemet | ****ha <code>false</code>, törli a teljes elemet | ||
***lehet <code>else</code> ága is | ***lehet <code>else</code> ága is | ||
****ha sok if-else ág van, érdemes az <code>[https://angular.dev/api/common/NgSwitch?tab=usage-notes ngSwitch]</code>-et használni helyette | **** ha sok if-else ág van, érdemes az <code>[https://angular.dev/api/common/NgSwitch?tab=usage-notes ngSwitch]</code>-et használni helyette | ||
===Android=== | ===Android === | ||
==== 2024. tavasz==== | ====2024. tavasz==== | ||
*A diasorokon szereplő kifejtős kérdések | *A diasorokon szereplő kifejtős kérdések | ||
**9. hét | **9. hét | ||
| 239. sor: | 236. sor: | ||
***Mit értünk erőforrás-minősítő alatt? | ***Mit értünk erőforrás-minősítő alatt? | ||
***Magyarázza el a fordítás mechanizmusát! | ***Magyarázza el a fordítás mechanizmusát! | ||
***Mit jelent az obfuszkálás? | *** Mit jelent az obfuszkálás? | ||
***Az Activity életciklus callback függvények felüldefiniálásakor meg kell-e hívni kötelezően az ősosztály implementációját? Miért? | ***Az Activity életciklus callback függvények felüldefiniálásakor meg kell-e hívni kötelezően az ősosztály implementációját? Miért? | ||
**10. hét | **10. hét | ||
| 250. sor: | 247. sor: | ||
***Hogyan támogatja az Android a lokalizációt? | ***Hogyan támogatja az Android a lokalizációt? | ||
**11. hét | **11. hét | ||
***Mi a <code>LayoutInflater</code> feladata? | *** Mi a <code>LayoutInflater</code> feladata? | ||
***Hogyan lehet elkészíteni és kezelni egy menüt? | ***Hogyan lehet elkészíteni és kezelni egy menüt? | ||
**12. hét | **12. hét | ||
| 284. sor: | 281. sor: | ||
***Milyen Jetpack Compose layoutokat ismer? Jellemezze őket! | ***Milyen Jetpack Compose layoutokat ismer? Jellemezze őket! | ||
***Mik a Jetpack Compose alapelvei? | ***Mik a Jetpack Compose alapelvei? | ||
***Miért hatékony módszer a recomposition? | *** Miért hatékony módszer a recomposition? | ||
***Vázolja fel, milyen Jetpack Compose-architektúrákat ismer! | ***Vázolja fel, milyen Jetpack Compose-architektúrákat ismer! | ||
***Mire használható a lazy loading? | ***Mire használható a lazy loading? | ||
***Mik azok a coroutine-ok? | ***Mik azok a coroutine-ok? | ||
** 14. hét | **14. hét | ||
***Milyen rövidtávú kommunikációs technológiákat ismer? | ***Milyen rövidtávú kommunikációs technológiákat ismer? | ||
***Milyen hosszútávú kommunikációs technológiákat ismer? | ***Milyen hosszútávú kommunikációs technológiákat ismer? | ||
***Mi a különbség az UDP és a TCP/IP között? | ***Mi a különbség az UDP és a TCP/IP között? | ||
***Hogyan kell végezni a hálózati kommunikációt? | *** Hogyan kell végezni a hálózati kommunikációt? | ||
***Mire szolgál a Retrofit library? | ***Mire szolgál a Retrofit library? | ||
***Milyen módszereket ismer a <code>BroadcastReceiver</code>-ek regisztrálására? | ***Milyen módszereket ismer a <code>BroadcastReceiver</code>-ek regisztrálására? | ||
***Hogyan biztosítható, hogy egy bizonyos típusú broadcastot megkapjon a komponensünk? | ***Hogyan biztosítható, hogy egy bizonyos típusú broadcastot megkapjon a komponensünk? | ||
***Milyen típusú <code>Service</code>-eket ismer? | *** Milyen típusú <code>Service</code>-eket ismer? | ||
***Mire kell nagyon figyelni egy <code>Service</code> írásakor? | ***Mire kell nagyon figyelni egy <code>Service</code> írásakor? | ||
***Milyen engedélykategóriákat ismer? | ***Milyen engedélykategóriákat ismer? | ||
| 309. sor: | 306. sor: | ||
****A <code>MainActivity</code> class <code>setContent</code> függvényében az <code>App()</code> hívását a <code>MyTheme</code> függvény hívásába kell ágyazni. | ****A <code>MainActivity</code> class <code>setContent</code> függvényében az <code>App()</code> hívását a <code>MyTheme</code> függvény hívásába kell ágyazni. | ||
**''Mi a Fragment?'' (kifejtős) | **''Mi a Fragment?'' (kifejtős) | ||
***objektumok, melyek... | *** objektumok, melyek... | ||
****a képernyő egy nagyobb részéért felelősek | **** a képernyő egy nagyobb részéért felelősek | ||
*****résznézeteket írnak le | *****résznézeteket írnak le | ||
*****Activity-kbe lehet őket ágyazni | *****Activity-kbe lehet őket ágyazni | ||
******egyszerre többet is | ******egyszerre többet is | ||
***** növelni lehet velük a modularitást | *****növelni lehet velük a modularitást | ||
****és / vagy a háttérben munkát végeznek | ****és / vagy a háttérben munkát végeznek | ||
**''Mire és hogyan használható egy flow?'' (kifejtős) | **''Mire és hogyan használható egy flow?'' (kifejtős) | ||
| 358. sor: | 355. sor: | ||
} | } | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
**[[Fájl:Kliens_vizsga3_20240617_the-lord-of-the-rings.svg|keret|jobbra|keretnélküli|332x332px]]''Vázolja fel a képen látható nézet kódját a '''<code>View</code>''' framework segítségével! A kódnak nem kell tökéletesnek és teljesnek lennie, de a lényegi részek szerepeljenek benne.'' | **[[Fájl:Kliens_vizsga3_20240617_the-lord-of-the-rings.svg|keret|jobbra|keretnélküli|332x332px]]''Vázolja fel a képen látható nézet kódját a '''<code>View</code>''' framework segítségével! A kódnak nem kell tökéletesnek és teljesnek lennie, de a lényegi részek szerepeljenek benne.'' | ||
***<syntaxhighlight lang="xml" line="1"> | ***<syntaxhighlight lang="xml" line="1"> | ||