Visualizzazione stampabile
-
No no, perché finire il flame? Mi ci metto anche io! :P
Quote:
Originariamente inviato da
Hitler
Beh non so se sono ancora in tempo, ma provo a rispondere io alle tue perplessità! Cominciamo in ordine numerico come hai fatto tu :
#1. Il package non è altro che l'insieme di tutte le classi presenti nell'apk.
No. Il package è un modo di raggruppare alcune classi. Puoi avere anche due o tre package diversi nello stesso apk.
Si chiamano namespace.
Quote:
#2. Non è proprio giusto definirle librerie, potresti usare la stessa definizione usata in c ' #include ', ma sono semplicemente delle altre classi importate nel package della tua apk.
Non sono importate. Si dichiara che verranno usate in quel file.
E` necessario perché il "compilatore" Java è molto pignolo, e vuole che sia dichiarato tutto. Serve anche a risolvere automaticamente i nomi quando non li specifichi completamente.
Quote:
#4. Un override è un sovrascrittura di un codice già implementato, nel tuo caso stai stai ri-implementando il costruttore della classe Activity, che ovviamente è stato ereditato dalla classe HelloAndroid che estende Activity.
Giusto. L'unica osservazione è che non è un costruttore ma un normale metodo.
Quote:
#5. Si è giusto quello che dici, ma java quando è nato ha creato anche delle convenzioni.. per farti capire ad esempio ha detto che tutti i package devono iniziare per lettera minuscola, le classi per lettera maiuscola, ecc ecc.. e in una convenzione dice che tutti i costruttori delle classi devono essere public.
Una cosa sono le convenzioni, un'altra gli obblighi.
Non è vero che tutti i costruttori devono essere public. Cerca come è definito il Singleton, per esempio.
Il discorso di MAIUSCOLE, minuscole, CamelCase, partialCamelCase, invece, sono convenzioni.
Quote:
#6. super(); non fa nient'altro che richiamare il costruttore della classe, ad esempio se crei due costruttori di una classe qualsiasi, uno dei quali non riceve alcun parametro e l'altro che riceve due paramentri ad esempio interi, puoi richiamare entrambi i costruttori scrivendo super(); e super(int x, int y); l'interprete (in gergo a volte chiamato compilatore) capisce a tempo di esecuzione di quale costruttore si tratta in base ai parametri passati.
Alla seconda domanda del punto 6 posso semplicemente risponderti in questo modo: hai mai sentito parlare di ricorsione? (scusa se non ti spiego cosa è, ma non è per niente semplice in qualche riga.)
super() richiama il costruttore della classe PADRE, mentre super.metodo() richiama il metodo() della classe PADRE. In pratica super serve a riferirsi alla (o alle) classi genitrici.
Quote:
#7. Devi sempre scrivere il tipo dell'oggetto che vuoi creare, quella è come una dichiarazione di una variabile in c, l'interprete deve sapere che oggetto sta utilizzando! Ti faccio capire meglio.. Immagina di avere una superclasse FigureGeometriche e tutte le sue sotto classi Triangolo,Quadrilatero ecc ecc..
Se istanzi un oggetto t = new FigureGeometriche(); (apparte che è sintatticamente scorretto e ti da errore) l'interprete non può sapere di che oggetto ha a che fare, proprio perchè dopo new puoi mettere qualsiasi costruttore delle classi superiori, ma l'oggetto può benissimamente essere un oggetto di qualsiasi sottoclasse. Quindi è corretto scrivere sia: Triangolo t = new FigureGeometriche(); sia: Triangolo t = new Triangolo();. Spero di essere stato chiaro in quest'ultimo passaggio..
Giusto, ma è una stortura tipicamente Javiana. Per esempio C# e Vala (che eredita molto da C#) permettono di scrivere
var t = new Triangolo();
E capiscono da soli che t è un Triangolo, visto che glielo dici 7 caratteri dopo.
Essendo Triangolo un figlio di FigureGeometriche, basta un cast (possibile anche in Java) quando ti serve riferirti a lui come FigureGeometriche.
Quote:
#9. Immagina setContentView come la printf in c. E' una delle tantissime procedure (in gergo a volte chiamate funzioni :P) di java per stampare a video.
No. setContentView() non stampa niente a schermo. Semplicemente comunica alla Activity che il contenuto della sua schermata è dato da quello che gli viene passato.
Può essere una banale Label (che, lei sì, in un modo o nell'altro scrive qualcosa a schermo), ma può anche essere un RelativeLayout con 30 widget dentro, anche complessi (come un Canvas o una lista che si riempie dinamicamente, o anche altri RelativeLayout o LinearLayout).
Senza voler fare polemica, non dico di voler essere perfettino, ma bisogna stare attenti a non dare informazioni completamente sbagliate (setContentView e super, per esempio). Le imperfezioni (costruttori pubblici e package, per esempio) vanno bene, non si può sapere tutto, e poi chi legge si informa, ha una traccia da cercare e capisce, ma consiglio di stare attenti.
Bye.
-