La scorsa settimana abbiamo concluso la nostra overview sui principali concetti dell’object oriented: incapsulamento, ereditarietà e polimorfismo; a livello di linguaggio Java abbiamo allo stesso modo introdotto i costrutti che consentono di implementare i concetti dell’OOP. Siete pronti adesso per un po’ di coding?
Esercitazione a sorpresa!
Inutile dire che il treno era in ritardo o che avete lasciato gli appunti nel tablet del vostro amico: oggi esercitazione a sorpresa, non ci sono scuse 🙂 ! In questo post vi propongo infatti un semplice esercizio per familiarizzare con la modellazione e gli aspetti OOP di Java e nel prossimo post andremo a vedere insieme la soluzione. Pronti?
Via col cronometro!
L’esercizio si basa sull’esempio proposto nelle scorse puntate e lo estende. Rinfreschiamoci la memoria: avevamo una classe astratta GraphicObject e due sue specializzazioni, Circle e Rectangle.
Vogliamo ora ampliare e integrare l’esempio nel modo seguente:
- Aggiungendo una nuova entità Square che modella un quadrato ed estenda GraphicObject;
- Aggiungendo una nuova interfaccia SuperficiePiana, che possegga un metodo calcolaArea senza alcun parametro in ingresso e che restituisca l’area calcolata; implementando quindi SuperficiePiana a Square, Circle e Rectangle;
- Aggiungendo una nuova entità Cylinder che estenda Circle;
- Aggiungendo una nuova entità Parallelepiped che estenda Rectangle;
- Aggiungendo una nuova interfaccia SuperficieSolida, che possegga un metodo calcolaVolume senza parametri in ingresso e che restituisca il volume calcolato; implementando quindi SuperficieSolida a Cylinder e Parallelepiped;
- Realizzando il diagramma UML di classe del modello;
- Implementando il digramma di classe utilizzando il codice Java.
Niente giustificazioni!?
So che siete ansiosi di vedere la mia proposta di soluzione, ma ho deciso che non ve la mostrerò subito, sperando che non rimaniate li ad attenderla una settimana, ma che vi sforziate a trovarne una tutta vostra. Ma non temete, non vi lascio in balia del codice, se desiderate potete infatti commentare questo post, proponendoci le vostre soluzione o domande; nel prossimo post darò una risposta collettiva a quelle ricevute ricevute facendo riferimento anche alle vostre soluzioni, evidenziandone pregi e migliorie per ognuna di esse: che ne dite?
Letture consigliate:
Java Puzzlers: Traps, Pitfalls, and Corner Cases
Joshua Bloch – Neal Gafter
Editore: Addison Wesley | Lingua: Inglese | Brossura: 282 pagine
Prezzo Listino: EUR 31,00
Prezzo Promozione: EUR 26,47 con Spedizione gratuita
Attendo la risposta collettiva 🙂
E quando avete imparato ad usare Java, correte ad iscrivervi su javajob.it per trovare lavoro.
Ciao
ma il corso non continua più?? 🙁
Ma non bisognerebbe implementare dei costruttori per Circle, Rectangle etc? Comunque una soluzione mia l’ho fatta, sono curioso di vedere se ho fatto idiozie 🙂
@Davide
Quando crei una nuova entità devi SEMPRE creare anche il suo costruttore (o i suoi costruttori). Volendo puoi lasciarli anche vuoti perchè sempre e comunque innanzitutto verrà richiamato (ANCHE SE NON ESPLICITATO) il costruttore della classe padre tramite super(…).
Ciao! Ho letto con interesse questa guida, essendo neofita di Java, OOP e Android…. a quando il prossimo post?
Mi interesserebbe sapere bene come funziona il context in Android….
grazie
Ma il Corso non verrà più aggiornato ????
Fateci sapere qualcosa. Era molto bello ed interessante. Forse quello più chiaro che ho mai seguito. Però…… sono mesi che non succede più nulla. Se è definitivamente cancellato fatecelo sapere, così non vengo più a controllare…..
Grazie
Per chi provasse a svolgerlo, ricordatevi che nelle cassi Cylinder e Parallelepiped dovete ridefinire anche il metodo CalcolaArea() oltre al nuovo metodo CalcolaVolume(), calcolando l’estensione della superficie esterna del solido.
Io ho fatto così, l’autore magari ha in mente una soluzione differente.
Comunque complimenti per questo tutorial! L’ho trovato ottimo.
Ottima guida davvero!! Mi sto interessando da poco alla programmazione di apps ma vorrei cominciare dalla base proprio e magari acquisire qualche nozione di programmazione anche esterna alle app, Java in particolare mi interessa molto. Tutt’altro che facile ma cercherò di darci dentro!! Grazie!!!!
L’idea di pubblicare un corso simile online è ottima e lodevole, ma qualcuno ha notizie del redattore? A quanto vedo ormai sono mesi che non porta avanti il corso.
Ottima guida davvero interessante.. Ho letto tutto di un fiato le 11 lezioni.. Il dovermi adattare dal C++ a Java sta diventando facile anche grazie a questa guida.. Ma le prossime lezioni? Che fine hanno fatto? Vorrei sempre imparare di più..
Premetto sono un programmatore per diletto e non professionale
ho diploma in RPG ll e cobol quado erano ancora completamente a linea di comando, ho fatto diversi programmi nel vecchio GW-BASIC e sono poi passato a Visual B in versione dalla 5 alla 8 conosco il C e dissento completamente da quello che ora è il modello di programmazione ad oggetti . Se vero è più facile fare la manutenzione dei programmi i medesimi sono diventati ingombranti ed anche se i processori sono diventati molto veloci rispetto ai vari 8086 8088 degli anni 80 i programmi attuali sono molto lenti rispetto a quei tempi .Inoltre i programmi di oggi si basano su centinaia di .dll , ocx o sottoprogrammi similari e librerie sui quali abbiamo poco controllo e molte sorprese a causa che sono create a monte da altri e la documentazione spesso è carente .
Quando si programmavo con la tecnica procedurale eravamo noi a stabilire e l’approccio all’oggetto i metodi venivano implementati al momento e le sorprese come anche i bug erano in numero molto minore e più facili da individuare , Non esisteva l’ereditarietà ed un costrutto operava sempre allo stesso modo se era scritto correttamente..
Comunque complimenti la guida anche se a mio avviso andrebbe completata con qualche esempio in più è molto lineare e ben fatta. Spero di riuscire a fare il port di alcuni miei programmi sviluppati in VB8 in Android
Salve,
ho seguito passo per passo il vostro corso ed è l’unico con cui sono riuscito finalmente a capire le cose in maniera completa.
vorrei sapere se c’è la possibilità che continui oppure è completamente stato abbandonato.
Grazie
Il corso è veramente interessante.. Spero che prima o poi proseguirà, mi è stato molto d’aiuto.. Grazie mille
Hai intenzione di continuare? E’intrigante e allo stesso tempo chiaro come esponi gli argomenti.
Spero che tratterai anche le GUI.
A presto.
Leo