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

Android: Órák anyagának és segédanyagoknak a hozzáadása
a Vizsga: Címsorok rendezése
100. sor: 100. 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, context: ClassMethodDecoratorContext) {
     return (...args: any[]) => {
     return (...args: any[]) => {
132. sor: 133. 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
*Vizsga
*****Milyen lehetőségeink vannak a fejlesztés közbeni debugolásra?
**''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)
*****Miket kell tartalmaznia a manifestnek?
***egy adott ID-jű elem DOM-ban való megtalálására
*****Mit értünk erőforrás-minősítő alatt?
****így könnyen lehet a JS-kódból módosítani a DOM-ot
*****Magyarázza el a fordítás mechanizmusát!
***a globális <code>document</code> objektumnak van ilyen tagváltozója, azt kell meghívni a JS-kódban
*****Mit jelent az obfuszkálás?
***pl.:<syntaxhighlight lang="html" line="1">
*****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?
*****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?
****10. hét
*****Magyarázza el az <code>Activity</code> back stack működési elvét!
*****Hogyan kell egy <code>Activity</code>-t indítani, ha vissza akarunk kapni adatot tőle?
*****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?
*****Hogyan adható meg, hogy egy stílus az egész alkalmazásra érvényes legyen?
****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!
*****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: 157. 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?'' (kifejtős)
*****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ó egy <code>.d.ts</code> kiterjesztésű fájl?'' (kifejtős)
*****declaration file
***declaration file
*****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], de 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], de a TypeScript fordításidőben jelzi a típusokkal kapcsolatos problémákat (Pythonban ezeket csak az IDE mutatja)
****''Mire szolgál az Angular <code>[https://angular.dev/api/common/NgIf?tab=description ngIf]</code> direktívája?'' (kifejtős)
**''Mire szolgál az Angular <code>[https://angular.dev/api/common/NgIf?tab=description ngIf]</code> direktívája?'' (kifejtős)
*****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">
<div *ngIf="train">
<div *ngIf="train">
     <p>
     <p>
234. sor: 181. sor:
</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 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?
*****Segítségével pl. fel lehet iratkozni egy adatfolyamra, hogy onnan folyamatosan kapjunk frissítéseket.
***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?
*****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.
**10. hé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.
***Magyarázza el az <code>Activity</code> back stack működési elvét!
*****<syntaxhighlight lang="kotlin" line="1">
***Hogyan kell egy <code>Activity</code>-t indítani, ha vissza akarunk kapni adatot tőle?
***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?
***Hogyan adható meg, hogy egy stílus az egész alkalmazásra érvényes legyen?
**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!
***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
** ''Hogyan tudunk saját stílust definiálni? Hogyan tudjuk ezt a stílust az egész alkalmazásra érvényesíteni?'' (kifejtős)
***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.
****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>.
***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> függvény hívását a <code>MyTheme</code> függvény hívásába kell ágyazni.
**''Mire és hogyan használható egy flow?'' (kifejtős)  
***A flow 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.
***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.
** ''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.
***<syntaxhighlight lang="kotlin" line="1">
@Composable
@Composable
fun loginPage(
fun loginPage(
279. sor: 284. sor:
     }
     }
}
}
</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