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?** | ||