This shows you the differences between two versions of the page.
poo-ca-cd:test:test_2015 [2020/07/28 23:08] 127.0.0.1 external edit |
poo-ca-cd:test:test_2015 [2021/01/29 13:49] (current) adriana.draghici [Clase interne] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | =Test grilă, ianuarie 2015= | + | =====Test grilă, ianuarie 2015===== |
Au fost 20 de întrebări, 4 variante de răspuns, un singur răspuns corect. 4 numere, aceleași 20 de întrebări în ordine diferită. | Au fost 20 de întrebări, 4 variante de răspuns, un singur răspuns corect. 4 numere, aceleași 20 de întrebări în ordine diferită. | ||
Line 7: | Line 7: | ||
Analizăm aici întrebările pe rând, structurat pe secțiuni. | Analizăm aici întrebările pe rând, structurat pe secțiuni. | ||
- | == Basics == | + | ==== Basics ==== |
**1. Ce obținem la rularea următorului cod:** | **1. Ce obținem la rularea următorului cod:** | ||
Line 40: | Line 40: | ||
- | //A) Statement-ul ''package'' poate fi pus doar pe prima linie necomentată dintr-un fișier | + | //A) Statement-ul ''package'' poate fi pus doar pe prima linie necomentată dintr-un fișier |
B) Specificatorii de acces pentru clase externe sunt doar public și default | B) Specificatorii de acces pentru clase externe sunt doar public și default | ||
C) Un fișier poate avea mai multe clase publice | C) Un fișier poate avea mai multe clase publice | ||
Line 61: | Line 61: | ||
- | == Constructori, referințe == | + | ==== Constructori, referințe ==== |
**3. Ce afișează următorul cod:** | **3. Ce afișează următorul cod:** | ||
Line 121: | Line 121: | ||
- | == OOP == | + | ==== OOP ==== |
- | **5. Care variantă reprezintă suprascrierea corectă a metodei: ''protected int computeX(int a, float b) {...}''?** | + | **5. Care variantă reprezintă suprascrierea corectă a metodei: ''protected int computeX(int a, float b) {...}''?** |
* ''int computeX(int a, float b) {...}'' | * ''int computeX(int a, float b) {...}'' | ||
Line 204: | Line 204: | ||
- | == Clase abstracte și interfețe == | + | ==== Clase abstracte și interfețe ==== |
**8. Care afirmații sunt corecte? (Ci denotă clase, Ii denotă interfețe)** | **8. Care afirmații sunt corecte? (Ci denotă clase, Ii denotă interfețe)** | ||
Line 251: | Line 251: | ||
- metodele din interfețe sunt prin definiție ''abstract''; final + abstract = compiler headbang - greșit. | - metodele din interfețe sunt prin definiție ''abstract''; final + abstract = compiler headbang - greșit. | ||
- | == Clase interne == | + | ==== Clase interne ==== |
**10. Cu ce poate fi înlocuită linia (xxx) pentru a obține o instanță a B?** | **10. Cu ce poate fi înlocuită linia (xxx) pentru a obține o instanță a B?** | ||
Line 316: | Line 316: | ||
* public | * public | ||
- | * Nu este necesar niciun cuvânt cheie în plus pentru a permite compilarea corectă a programului. | + | * **Nu este necesar niciun cuvânt cheie în plus pentru a permite compilarea corectă a programului.** |
- | * **final** | + | * final |
* static | * static | ||
- | **Explicație:** //Pentru a folosi variabile locale din afara contextului (//scope//-ului) unei clase interne (cum e și cazul nostru), e necesar cuvântul cheie ''final''//. Motivul este layout-ul în memorie al claselor și variabilelor, iar ''final'' permite (prin copiere) și garantează accesul la valoarea corectă a variabliei ''x'' la orice moment. ''static'' și ''public'' nu au oricum sens pentru variabile locale, iar diferențierea dintre "nu e nevoie de modificator" și "final" este motivul precedent. | + | **Explicație:** Felul în care este folosită variabila o face// effectively final// si nu este nevoie de vreun cuvânt cheie în fața declarației ei. Dacă era modificată atunci era nevoie de cuvântul cheie ''final''. Vedeți explicația din laboratorul de [[poo-ca-cd:laboratoare:clase-interne|clase interne]] despre //effectively final//. |
- | + | ==== Colecții și genericitate ==== | |
- | == Colecții și genericitate == | + | |
**13. Dacă dorim să stocăm un șir de elemente fără duplicate într-o colecție fără să ne intereseze ordinea elementelor sau sortarea lor, clasa cea mai potrivită este** | **13. Dacă dorim să stocăm un șir de elemente fără duplicate într-o colecție fără să ne intereseze ordinea elementelor sau sortarea lor, clasa cea mai potrivită este** | ||
Line 365: | Line 364: | ||
* ''ArrayList<Student>mylist = new ArrayList<Person>();'' | * ''ArrayList<Student>mylist = new ArrayList<Person>();'' | ||
- | **Explicație**: Ideea cheie în această întrebare și în lucrul cu generics în general este că, de exemplu (exemplul nostru), dacă ''Student'' e subclasă a ''Person'', atunci ''ArrayList<Student>'' **nu** e subclasă a ''ArrayList<Person>'', deci atribuirea nu este corectă (un astfel de exemplu este și în [[:poo-ca-cd::laboratoare:genericitate#genericitatea-in-subtipuri|laboratorul de genericitate]]). | + | **Explicație**: Ideea cheie în această întrebare și în lucrul cu generics în general este că, de exemplu (exemplul nostru), dacă ''Student'' e subclasă a ''Person'', atunci ''ArrayList<Student>'' **nu** e subclasă a ''ArrayList<Person>'', deci atribuirea nu este corectă (un astfel de exemplu este și în [[:poo-ca-cd::laboratoare:genericitate#genericitatea_in_subtipuri|laboratorul de genericitate]]). |
- | Matching-ul tipului generic (cel dintre paranteze unghiulare) este făcut la compilare și singura variantă care trece de această verificare este varianta în bold. Am fi putut avea matching corect cu wildcard-uri, dar nu a fost cazul aici. Pentru mai multe detalii puteți să citiți despre [[:poo-ca-cd:http://en.wikipedia.org/wiki/Covariance_and_contravariance_%28computer_science%29 | covarianță și contravarianță]] și despre [[:poo-ca-cd:http://docs.oracle.com/javase/tutorial/java/generics/erasure.html | type erasure]] ca să înțelegeți motivele pentru care Java se comportă astfel. | + | Matching-ul tipului generic (cel dintre paranteze unghiulare) este făcut la compilare și singura variantă care trece de această verificare este varianta în bold. Am fi putut avea matching corect cu wildcard-uri, dar nu a fost cazul aici. Pentru mai multe detalii puteți să citiți despre [[http://en.wikipedia.org/wiki/Covariance_and_contravariance_%28computer_science%29 | covarianță și contravarianță]] și despre [[http://docs.oracle.com/javase/tutorial/java/generics/erasure.html | type erasure]] ca să înțelegeți motivele pentru care Java se comportă astfel. |
- | == Excepții == | + | ==== Excepții ==== |
**16. Despre excepțiile unchecked:** | **16. Despre excepțiile unchecked:** | ||
Line 420: | Line 419: | ||
- | == Design patterns, JUnit, misc == | + | ==== Design patterns, JUnit, misc ==== |
**18. Vrem să implementăm un framework de user interface. Cu ce design pattern am putea modela comportamentul de onClick -> doSomething pentru un element de tip buton oarecare?** | **18. Vrem să implementăm un framework de user interface. Cu ce design pattern am putea modela comportamentul de onClick -> doSomething pentru un element de tip buton oarecare?** |