„Kliensalkalmazások” változatai közötti eltérés

Android: Órák anyagának és segédanyagoknak a hozzáadása
a Értékelés: Ponthatárok sablonba foglalása
 
(5 közbenső módosítás ugyanattól a felhasználótól nincs mutatva)
45. sor: 45. sor:
Vizsga: max. 60 pont
Vizsga: max. 60 pont


=== Értékelés===
=== Értékelés===
*88– 100: jeles
{{Jegykonvertálás|0 – 49|50 61|62 – 74|75 – 87|88 100
*75 87: jó
}}
* 62 – 74: közepes
*50 61: elégséges
*0 – 49: elégtelen


==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ő; method 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''.
*[[Média:Kliens ea5 2023 web.pdf|6. hét (Albert István)]]: Angular: MV*, architektúra, metaadatok, dekorátorok, komponensek, szolgáltatások, Component, string interpolation, adatkötés (@Input / @Output, CSS class / -stílus), események kötése, kétirányú adatkötés, attribútum / property, (strukturális / attribútum)direktívák (HostListener), ngIf, ngFor, direktíva, alkalmazás- / komponens-életciklus, lifecycle hooks, ngOnInit, ngOnChanges, SimpleChange, ngDoCheck
*[[Média:Kliens ea5 2023 web.pdf|6. hét (Albert István)]]: Angular: MV*, architektúra, metaadatok, dekorátorok, komponensek, szolgáltatások, Component, string interpolation, adatkötés (@Input / @Output, CSS class / -stílus), események kötése, kétirányú adatkötés, attribútum / property, (strukturális / attribútum)direktívák (HostListener), ngIf, ngFor, direktíva, alkalmazás- / komponens-életciklus, lifecycle hooks, ngOnInit, ngOnChanges, SimpleChange, ngDoCheck
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, XML alapú UI, eseménykezelés, Kotlin; '''<code>Activity</code>, <code>Service</code>, content provider, <code>BroadcastReceiver</code>;''' manifest, erőforrások; 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); UI: <code>viewBinding</code>; dpi, dp, sp; <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
*[[Média:Kliens ea 11 20240422.pdf|11. hét (Pásztor Dániel)]]: <code>View</code>: <code>getLayoutInflater()</code>, validáció, <code>Menu</code>, <code>ActionBar</code>, <code>Toolbar</code>; <code>PopupWindow</code>, <code>AlertDialog</code>, <code>Snackbar</code>; <code>style</code>, <code>Theme</code>; grafikák, animációk
*[[Média:Kliens ea 11 20240422.pdf|11. hét (Pásztor Dániel)]]: <code>View</code>: <code>getLayoutInflater()</code>, validáció, <code>Menu</code>, <code>ActionBar</code>, <code>Toolbar</code>; <code>PopupWindow</code>, <code>AlertDialog</code>, <code>Snackbar</code>; <code>style</code>, <code>Theme</code>; grafikák, animációk
*[[Média:Kliens ea 12 20240429.pdf|12. hét (Gazdi László)]]: <code>Fragment</code>: életciklus, csatolása (statikusan és dinamikusan), <code>FragmentManager</code>, <code>FragmentTransaction</code>, kommunikáció, <code>DialogFragment</code>; <code>navigation</code>: component, graph; <code>RecyclerView</code>: <code>ViewHolder</code>, <code>Adapter</code>; perzisztens adattárolás: <code>(Shared)Preferences</code>, SQLite, ORM, <code>room</code>, javasolt architektúra; fájlkezelés: internal / external storage, statikus fájlok, nyilvános lemezterület; BaaS: Firebase; '''content provider:''' elérése (<code>CONTENT_URI</code>), műveletek, engedélyek, <code>Cursor</code>, <code>ContentResolver</code>, CRUD
**Habár a diasoron én nem láttam példát az <code>ImageView</code> használatára, [[Kliensalkalmazások#:~:text=Vázolja fel a képen látható nézet kódját a View framework segítségével!|a vizsgán kérdezik]]. De legalább az egyik laboron [https://bmeviaubb03.github.io/laborok/laborok/android/ui-basics/#:~:text=A%20m%C3%A1sik%20%C3%BAjdons%C3%A1g%20itt%20az%20ImageView%20haszn%C3%A1lata. szó esik róla].
*[[Média:Kliens ea 12 20240429.pdf|12. hét (Gazdi László)]]: <code>Fragment</code>: életciklus, csatolása (statikusan és dinamikusan), <code>FragmentManager</code>, <code>FragmentTransaction</code>, kommunikáció, <code>DialogFragment</code>; <code>navigation</code>: component, graph; <code>RecyclerView</code>: <code>ViewHolder</code>, <code>Adapter</code>; perzisztens adattárolás: <code>(Shared)Preferences</code>, SQLite, ORM, <code>room</code>, javasolt architektúra; fájlkezelés: internal / external storage, statikus fájlok, nyilvános lemezterület; BaaS: Firebase; '''<code>ContentProvider</code>:''' elérése (<code>CONTENT_URI</code>), műveletek, engedélyek, <code>Cursor</code>, <code>ContentResolver</code>, CRUD
**Megjegyzés az 51. diához: a <code>BLOB</code> is egy támogatott adattípus.
**Megjegyzés az 51. diához: a <code>BLOB</code> is egy támogatott adattípus.
*[[Média:Kliens ea 13 20240506.pdf|13. hét (Gazdi László)]]: Jetpack Compose: <code>@Composable</code> '''(5 szabálya),''' <code>@Preview</code>, layoutok (<code>Column</code>, <code>Row</code>, <code>Box</code>), weight, <code>Alignment</code> és <code>Arrangement</code>, <code>Modifier</code>, <code>Scaffold</code>, <code>TextField</code>, Material Design; mappastruktúra, composition / initial composition / recomposition, adatok átadása; <code>ViewModel</code>: MVVM, MVI; navigation graph: funkciók, paraméterek, konstansok; dialógusok: <code>AlertDialog</code>; listák: lazy loading; szálak és coroutine-ok: suspending functions; flow
*[[Média:Kliens ea 13 20240506.pdf|13. hét (Gazdi László)]]: Jetpack Compose: <code>@Composable</code> '''(5 szabálya),''' <code>@Preview</code>, layoutok (<code>Column</code>, <code>Row</code>, <code>Box</code>), weight, <code>Alignment</code> és <code>Arrangement</code>, <code>Modifier</code>, <code>Scaffold</code>, <code>TextField</code>, Material Design; mappastruktúra, composition / initial composition / recomposition, adatok átadása; <code>ViewModel</code>: MVVM, MVI; navigation graph: funkciók, paraméterek, konstansok; dialógusok: <code>AlertDialog</code>; listák: lazy loading; szálak és coroutine-ok: suspending functions; flow
*[[Média:Kliens ea 14 20240513.pdf|14. hét (Gazdi László)]]: hálózati kommunikáció: near-field: NFC, Bluetooth (LE), [https://developers.google.com/nearby/ Nearby]; web: TCP/IP socket (<code>InputStream</code>, <code>OutputStream</code>), UDP (Kyronet); HTTP(S): kapcsolatok kezelése, könyvtárak, timeout; aszinkron kommunikáció; adatformátumok: JSON, XML; REST: Retrofit (entitások, API); <code>'''BroadcastReceiver'''</code>: események, intentek (<code>BOOT_COMPLETED</code>); '''<code>Service</code>''': készítése, (működési) típusok, limitációk, megvalósítás, életciklusmodell, kezelés, műveletek végrehajtása; runtime permissions: típusai, kezelése (kérés), best practice, Jetpack Compose
*[[Média:Kliens ea 14 20240513.pdf|14. hét (Gazdi László)]]: hálózati kommunikáció: near-field: NFC, Bluetooth (LE), [https://developers.google.com/nearby/ Nearby]; web: TCP/IP socket (<code>InputStream</code>, <code>OutputStream</code>), UDP (Kyronet); HTTP(S): kapcsolatok kezelése, könyvtárak, timeout; aszinkron kommunikáció; adatformátumok: JSON, XML; REST: Retrofit (entitások, API); <code>'''BroadcastReceiver'''</code>: események, intentek (<code>BOOT_COMPLETED</code>); '''<code>Service</code>''': készítése, (működési) típusok, limitációk, megvalósítás, életciklusmodell, kezelés, műveletek végrehajtása; runtime permissions: típusai, kezelése (kérés), best practice, Jetpack Compose
**Megjegyzés a 14. diához: a Nearby Messages [https://developers.google.com/nearby/#:~:text=Nearby%20Messages%20is%20deprecated%20and%20will%20stop%20working%20as%20of%20December%202023. 2023], a Nearby Notifications pedig már [https://developers.google.com/nearby/notifications/overview#:~:text=Android%20users%20will%20stop%20receiving%20Nearby%20Notifications%20on%20December%206th,%202018. 2018 decemberében] meg lett szüntetve.
**Megjegyzés a 14. diához: a Nearby Messagest [https://developers.google.com/nearby/#:~:text=Nearby%20Messages%20is%20deprecated%20and%20will%20stop%20working%20as%20of%20December%202023. 2023], a Nearby Notifications-t pedig már [https://developers.google.com/nearby/notifications/overview#:~:text=Android%20users%20will%20stop%20receiving%20Nearby%20Notifications%20on%20December%206th,%202018. 2018 decemberében] megszüntették.
*15. hét: ''szünet''
*15. hét: ''szünet''


100. sor: 98. sor:
Az előadásokon és laborokon bemutatott technológiák segítségével egy komplex alkalmazás készítése önálló funkcionalitással.
Az előadásokon és laborokon bemutatott technológiák segítségével egy komplex alkalmazás készítése önálló funkcionalitással.


==Vizsga==  
==Vizsga==
[[Kliensalkalmazások kvíz|Kvíz]]


*[[Kliensalkalmazások kvíz|Kvíz]]
===Web===
*2023. tavasz
 
**Mintavizsga
==== 2023. tavasz====
***Web
*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">
function logged(originalMethod: any, context: ClassMethodDecoratorContext) {
function logged(originalMethod: any) {
     return (...args: any[]) => {
     try {
         try {
         console.log("Calculation started...");
            console.log("Calculation started...");
        return (...args: any[]) => originalMethod.call(this, ...args);
            return originalMethod.call(this, ...args);
    }
        }
    finally {
        finally {
        console.log("...finished!");
            console.log("...finished!");
        }
     }
     }
}
}
132. sor: 129. sor:
calculator.add(1, 9);
calculator.add(1, 9);
</syntaxhighlight>
</syntaxhighlight>
*2024. tavasz
 
**A diasorokon szereplő kifejtős kérdések
====2024. tavasz====
***Android
 
****9. hét
*A vizsga kifejtős kérdései
*****Milyen lehetőségeink vannak a fejlesztés közbeni debugolásra?
** ''Mik az overload szignatúrák? Hogyan kell őket használni?''
*****Miket kell tartalmaznia a manifestnek?
***egy függvénynek többféle számú és típusú bemeneti változóját lehet velük definiálni
*****Mit értünk erőforrás-minősítő alatt?
***pl. az alábbi kód első két sorában:<syntaxhighlight lang="ts" line="1">
*****Magyarázza el a fordítás mechanizmusát!
function makeDate(epoch: number): Date;
*****Mit jelent az obfuszkálás?
function makeDate(year: number, month: number, day: number): Date;
*****Az Activity callback életciklus-függvények felüldefiniálásakor meg kell-e hívni kötelezően az ősosztály implementációját? Miért?
function makeDate(epochOrYear: number, month?: number, day?: number): Date {
*****Ha <code>A</code> <code>Activity</code>-ről átváltunk a <code>B</code> <code>Activity</code>-re, milyen sorrendben hívódnak meg az életciklusfüggvények?
  if (month !== undefined && day !== undefined) {
****10. hét
    return new Date(epochOrYear, month-1, day);
*****Magyarázza el az <code>Activity</code> back stack működési elvét!
  } else {
*****Hogyan kell egy <code>Activity</code>-t indítani, ha vissza akarunk kapni adatot tőle?
    return new Date(epochOrYear);
*****Hogyan működik az implicit <code>Intent</code>?
  }
*****Mit értünk ''sűrűségfüggetlen pixel'' alatt?
}
*****Egy 320 dpi-s képernyőn <code>1.dp</code> hány darab pixelnek felel meg?
const dateFromEpoch = makeDate(1719082884000);
*****Sorolja fel a legfontosabb androidos layoutokat!
const dateFromDate = makeDate(2024, 6, 22);
*****Hogyan támogatja az Android a lokalizációt?
</syntaxhighlight>a 3. sorban található az implementációs szignatúra
****11. hét
****mindig csak egy lehet belőle
*****Mi a <code>LayoutInflater</code> feladata?
****nem lehet közvetlenül meghívni
*****Hogyan lehet elkészíteni és kezelni egy menüt?
**''Mire való a <code>[https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementById getElementById]</code> függvény? Hogyan lehet elérni?''
*****Hogyan adható meg, hogy egy stílus az egész alkalmazásra érvényes legyen?
***egy adott ID-jű elem DOM-ban való megtalálására
****12. hét
****így könnyen lehet a JS-kódból módosítani a DOM-ot
*****Mire használhatók a <code>Fragment</code>-ek?
***a globális <code>document</code> objektumnak van ilyen tagváltozója, azt kell meghívni a JS-kódban
*****Hogyan csatolhatók a <code>Fragment</code>-ek?
***pl.:<syntaxhighlight lang="html" line="1">
*****Hogyan kommunikálhatnak a <code>Fragment</code>-ek egymással?
*****Mire jó a <code>RecyclerView</code>? Mik az előnyei?
*****Milyen adattárolási lehetőségeket ismer?
*****Mire használható a <code>SharedPreferences</code>?
*****Hogyan támogatja az Android az adatok adatbázisban tárolását?
*****Sorolja fel az ORM alapelveit!
*****Milyen lehetőségek vannak a fájlrendszerben való adattárolásra?
*****Mire jó egy content provider?
*****Milyen formában adja vissza az adatokat egy content provider?
****13. hét
*****Mik a Jetpack Compose használatának előnyei?
*****Milyen Jetpack Compose layoutokat ismer? Jellemezze őket!
*****Mik a Jetpack Compose alapelvei?
*****Miért hatékony módszer a recomposition?
*****Vázolja fel, milyen Jetpack Compose-architektúrákat ismer!
*****Mire használható a lazy loading?
*****Mik azok a coroutine-ok?
*****Mire való a flow, és hogyan használjuk?
****14. hét
*****Milyen rövidtá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?
*****Hogyan kell végezni a hálózati kommunikációt?
*****Mire szolgál a Retrofit library?
*****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?
*****Milyen típusú <code>Service</code>-eket ismer?
*****Mire kell nagyon figyelni egy <code>Service</code> írásakor?
*****Milyen engedélykategóriákat ismer?
*****Milyen fázisai vannak a veszélyes engedélyek kérésének?
**Vizsga
***Web
****''Mire való a <code>[https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementById getElementById]</code> függvény? Hogyan lehet elérni?'' (kifejtős)
*****egy adott ID-jű elem DOM-ban való megtalálására
******így könnyen lehet a JS-kódból módosítani a DOM-ot
*****a globális <code>document</code> objektumnak van ilyen tagváltozója, azt kell meghívni a JS-kódban
*****pl.:<syntaxhighlight lang="html" line="1">
<button id="disablerButton">
<button id="disablerButton">
     Disable the other button
     Disable the other button
210. sor: 170. sor:
disablerButton.addEventListener("click", disableButton("buttonToDisable"));
disablerButton.addEventListener("click", disableButton("buttonToDisable"));
</syntaxhighlight>
</syntaxhighlight>
****''Mi a különbség a'' block ''és'' inline ''típusú HTML-elemek között?'' (kifejtős)
**''Mi a különbség a'' block ''és'' inline ''típusú HTML-elemek között?''
*****block
***block
******pl.: <code><nowiki><div></nowiki></code>, <code><nowiki><p></nowiki></code>
****pl.: <code><nowiki><div></nowiki></code>, <code><nowiki><p></nowiki></code>
******a szülőjének teljes szélességét kitölti
****a szülőjének teljes szélességét kitölti
******új sorban jelenik meg
****új sorban jelenik meg
*****inline
***inline
******pl.: <code><a></code>, <code><nowiki><span></nowiki></code>
****pl.: <code><a></code>, <code><nowiki><span></nowiki></code>
******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ó egy <code>.d.ts</code> kiterjesztésű fájl?'' (kifejtős)
**''Mire valóak az űrlapok?''
*****declaration file
***adatok beküldésére
*****kizárólag a hozzá tartozó JavaScript-fájl típusinformációit tartalmazza
****kérdőív
*****gyakorlatilag ugyanaz, mint Pythonban a [https://typing.readthedocs.io/en/latest/source/stubs.html type stub], de a TypeScript fordításidőben jelzi a típusokkal kapcsolatos problémákat (Pythonban ezeket csak az IDE mutatja)
****belépés
****''Mire szolgál az Angular <code>[https://angular.dev/api/common/NgIf?tab=description ngIf]</code> direktívája?'' (kifejtős)
***meglévő adatok módosítására
*****elemek feltételes megjelenítésére
****az adatmezőket előre ki lehet tölteni
*****pl.:<syntaxhighlight lang="ng2" line="1">
***a bevitt adatokat azok rögzítése előtt még validálni lehet
****kliens- vagy szerveroldalon
***á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
** ''Mire való egy űrlap elemeiben a <code>name</code> attribútum?''
***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
*****GET esetén: <code><nowiki>https://foo.com/?name1=value1&name2=value2</nowiki></code>
*****POST esetén: a fenti, <code>?</code> utáni rész kerül a bodyba
***a JS-kódban a <code>document.getElementByName()</code> használatakor erre lehet hivatkozni
****ezzel könnyen manipulálható a DOM
**''Mire való egy <code>.d.ts</code> kiterjesztésű fájl?''
***declaration file
***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)
** ''Milyen előnyei vannak a dependency injection használatának?''
***separation of concerns
****az injektor a felelős a dependency létrehozásáért, életciklusáért
*****teljesen független a dependency életciklusa a komponensétől
******újrafelhasználható
*****csak az injektornak kell ismernie a függőségi gráfot
****erősebb dekompozíció
*****jobb tesztelhetőség
*****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?''  
***elemek feltételes megjelenítésére
***pl.:<syntaxhighlight lang="ng2" line="1">
<div *ngIf="train">
<div *ngIf="train">
     <p>
     <p>
233. 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
 
****''Hogyan tudunk saját stílust definiálni? Hogyan tudjuk ezt a stílust az egész alkalmazásra érvényesíteni?'' (kifejtős)
===Android ===
*****View
 
******Saját stílust a <code>res/values/styles.xml</code> fájlban egy <code><style></code> tag, majd ez alatt további <code><item></code> tagek hozzáadásával lehet definiálni.
====2024. tavasz====
******A manifest fájl <code><application></code> tagjébe kell felvenni egy <code>android:theme</code> attribútumként, pl. így: <code><application android:theme="@style/CustomStyle"></code>.
*A diasorokon szereplő kifejtős kérdések
*****Jetpack Compose
**9. hét
******Saját stílust egy <code>@Composable</code> függvény (pl. <code>MyTheme</code>) létrehozásával lehet definiálni, melyben pl. a <code>MaterialTheme</code> függvényt az általunk választott paraméterekkel hívjuk meg.
***Milyen lehetőségeink vannak a fejlesztés közbeni debugolásra?
******A <code>MainActivity</code> class <code>setContent</code> függvényében az <code>App</code> függvény hívását a <code>MyTheme</code> függvény hívásába kell ágyazni.
***Miket kell tartalmaznia a manifestnek?
****''Mire és hogyan használható egy flow?'' (kifejtős)
***Mit értünk erőforrás-minősítő alatt?
*****A flow egy Python generatorhoz vagy egy Java Streamhez hasonló változótípus.
***Magyarázza el a fordítás mechanizmusát!
******Egy Python generatorhoz hasonlóan több visszatérési értéke is lehet.
*** Mit jelent az obfuszkálás?
******Egy Java Streamhez hasonlóan lehet mapelni vagy filterezni.
***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?
*****Segítségével pl. fel lehet iratkozni egy adatfolyamra, hogy onnan folyamatosan kapjunk frissítéseket.
**10. hét
*****A <code>Flow<></code> típusú változó <code>.collect { }</code> függvényét meghívva egy lambda kifejezést lehet végrehajtani a kapott értékkel.
***Magyarázza el az <code>Activity</code> back stack működési elvét!
****''Vázolja fel a képen látható nézet kódját Jetpack Compose segítségével! A kódnak nem kell tökéletesnek és teljesnek lennie, de a lényegi részek szerepeljenek benne.'' (kódolós) A képen egy képernyő, melynek közepén teljes szélességben egy ''Email'' feliratú szövegmező látható, alatta egy ''Password'' feliratúval. Mindkét szövegmezőbe ugyanazon látható szöveg van beírva. Alattuk pedig egy ''Login'' gomb látható, szintén a képernyő teljes szélességében.
***Hogyan kell egy <code>Activity</code>-t indítani, ha vissza akarunk kapni adatot tőle?
*****<syntaxhighlight lang="kotlin" line="1">
***Hogyan működik az implicit <code>Intent</code>?
***Mit értünk ''sűrűségfüggetlen pixel'' alatt?
***Egy 320 dpi-s képernyőn <code>1.dp</code> hány darab pixelnek felel meg?
***Sorolja fel a legfontosabb androidos layoutokat!
***Hogyan támogatja az Android a lokalizációt?
**11. hét
*** Mi a <code>LayoutInflater</code> feladata?
***Hogyan lehet elkészíteni és kezelni egy menüt?
**12. hét
***Mire használhatók a <code>Fragment</code>-ek?
***Hogyan csatolhatók a <code>Fragment</code>-ek?
***Hogyan kommunikálhatnak a <code>Fragment</code>-ek egymással?
***Mire jó a <code>RecyclerView</code>? Mik az előnyei?
***Milyen adattárolási lehetőségeket ismer?
***Mire használható a <code>SharedPreferences</code>?
***Hogyan támogatja az Android az adatok adatbázisban tárolását?
***Sorolja fel az ORM alapelveit!
****
{| class="wikitable"
|+
!DB
!code
|-
|table
|class
|-
|column
|field
|-
|row
|object
|}
****
***Milyen lehetőségek vannak a fájlrendszerben való adattárolásra?
***Mire jó egy <code>ContentProvider</code>?
***Milyen formában adja vissza az adatokat egy <code>ContentProvider</code>?
**13. hét 
***Mik a Jetpack Compose használatának előnyei?
***Milyen Jetpack Compose layoutokat ismer? Jellemezze őket!
***Mik a Jetpack Compose alapelvei?
*** Miért hatékony módszer a recomposition?
***Vázolja fel, milyen Jetpack Compose-architektúrákat ismer!
***Mire használható a lazy loading?
***Mik azok a coroutine-ok?
**14. hét
***Milyen rövidtá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?
*** Hogyan kell végezni a hálózati kommunikációt?
***Mire szolgál a Retrofit library?
***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?
*** Milyen típusú <code>Service</code>-eket ismer?
***Mire kell nagyon figyelni egy <code>Service</code> írásakor?
***Milyen engedélykategóriákat ismer?
***Milyen fázisai vannak a veszélyes engedélyek kérésének?
*Vizsga
**''Hogyan tudunk saját stílust definiálni? Hogyan tudjuk ezt a stílust az egész alkalmazásra érvényesíteni?'' (kifejtős)
***<code>View</code>
****Saját stílust a <code>res/values/styles.xml</code> fájlban egy <code><style></code> tag, majd ez alatt további <code><item></code> tagek hozzáadásával lehet definiálni.
****A manifest fájl <code><application></code> tagjébe kell felvenni egy <code>android:theme</code> attribútumként, pl. így: <code><application android:theme="@style/custom_style"></code>.
***Jetpack Compose
****Saját stílust egy <code>@Composable</code> függvény (pl. <code>MyTheme</code>) létrehozásával lehet definiálni, melyben pl. a <code>MaterialTheme</code> függvényt az általunk választott paraméterekkel hívjuk meg.
****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)
*** objektumok, melyek...
**** a képernyő egy nagyobb részéért felelősek
*****résznézeteket írnak le
*****Activity-kbe lehet őket ágyazni
******egyszerre többet is
*****növelni lehet velük a modularitást
****és / vagy a háttérben munkát végeznek
**''Mire és hogyan használható egy flow?'' (kifejtős)  
***egy Python generatorhoz vagy egy Java Streamhez hasonló változótípus
****egy Python generatorhoz hasonlóan több visszatérési értéke is lehet
****egy Java Streamhez hasonlóan lehet mapelni vagy filterezni
***segítségével pl. fel lehet iratkozni egy adatfolyamra, hogy onnan folyamatosan kapjunk frissítéseket
***egy <code>Flow<></code> típusú változó <code>.collect { }</code> függvényét meghívva egy lambda kifejezést lehet végrehajtani a kapott értékekkel
**Ha <code>A</code> <code>Activity</code>-ről átváltunk a <code>B</code> <code>Activity</code>-re, milyen sorrendben hívódnak meg az életciklus callback függvények?
**#<code>A.onPause()</code>
**#<code>B.onCreate()</code>
**#<code>B.onStart()</code>
**#<code>B.onResume()</code>
**#*ekkor már <code>B</code>-n van a fókusz
**#<code>A.onStop()</code>
**#*mivel már nem látható
**''Vázolja fel a képen látható nézet kódját '''Jetpack Compose''' segítségével! A kódnak nem kell tökéletesnek és teljesnek lennie, de a lényegi részek szerepeljenek benne.'' A képen egy képernyő, melynek közepén teljes szélességben egy ''Email'' feliratú szövegmező látható, alatta egy ''Password'' feliratúval. Mindkét szövegmezőbe ugyanazon látható szöveg van beírva. Alattuk pedig egy ''Login'' gomb látható, szintén a képernyő teljes szélességében.
***<syntaxhighlight lang="kotlin" line="1">
@Composable
@Composable
fun loginPage(
fun loginPage(
262. sor: 335. sor:
     var emailAddress = "klaf@aut.bme.hu"
     var emailAddress = "klaf@aut.bme.hu"


     Column() {
     Column(
        modifier = modifier.fillMaxSize(),
        horizontalAlignment = Alignment.CenterHorizontally,
    ) {
         TextField(
         TextField(
             placeholder = "Email",
             placeholder = "Email",
279. sor: 355. sor:
     }
     }
}
}
</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.''
***<syntaxhighlight lang="xml" line="1">
<RelativeLayout
    android:background="#000000">
   
    <ImageView
        android:src="@drawable/one_ring_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:padding="16dp" />
   
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_centerHorizontal="true"
        android:background="#FFFFFF">
       
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="J. R. R. Tolkien"
            android:textColor="#000000"
            android:textSize="24sp" />
       
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="The Lord of the Rings"
            android:textColor="#000000"
            android:textSize="24sp" />
       
    </LinearLayout>
</RelativeLayout>
</syntaxhighlight>
</syntaxhighlight>
{{Lábléc_-_Üzemmérnök-informatikus_alapszak}}
{{Lábléc_-_Üzemmérnök-informatikus_alapszak}}
A lap eredeti címe: „https://vik.wiki/Kliensalkalmazások