Posts tagged ‘programmazione’

Array Multidimensionali con Java

Per poter rappresentare strutture dati a due o più dimensioni, Java supporta gli  array  multidimensionali  o  array  di  array.  Per  dichiarare  un  array multidimensionale la sintassi è simile a quella per gli array, con la differenza che  è  necessario  specificare  ogni  dimensione,  utilizzando  una  coppia  di parentesi “[]”. Un array a due dimensioni può essere dichiarato nel seguente modo:

tipo[][] identificatore;

in cui “tipo” ed “identificatore”  rappresentano  rispettivamente  il  tipo  base dell’array ed il nome che ci consentirà di accedere ai dati in esso contenuti.

Nella realtà, Java organizza gli array multidimensionali come “array di array”; per  questo  motivo,  non  è  necessario  specificarne  la  lunghezza  per  ogni dimensione dichiarata, al momento della creazione: in altre parole, un array multidimensionale non deve essere necessariamente creato utilizzando una singola operazione “new”. 

Nel  prossimo  esempio,  rappresentiamo  una  tavola  per  il  gioco  della  dama utilizzando  un  array  a  due  dimensioni  il  cui  tipo  base  è  l’oggetto  Pedina.

L’inizializzazione dell’oggetto viene effettuata riga per riga, un valore null nella posizione [i][j] identifica una casella vuota (Figura).

 


Pedina[][] dama = new Pedina[8][];

Pedina[] riga0 = {

new Pedina(“bianca”),null, new Pedina(“bianca”),null,

new Pedina(“bianca”),null, new Pedina(“bianca”),null

};

Pedina[] riga1 = {

null, new Pedina(“bianca”), null, new Pedina(“bianca”),

null, new Pedina(“bianca”), null, new Pedina(“bianca”)

};

Pedina[] riga2 = {

new Pedina(“bianca”),null, new Pedina(“bianca”),null,

new Pedina(“bianca”),null, new Pedina(“bianca”),null

};

Pedina[] riga3 = { null, null, null, null, null, null, null, null };

Pedina[] riga4 = { null, null, null, null, null, null, null, null };

Pedina[] riga5 = {

null, new Pedina(“nera”), null, new Pedina(“nera”),

null, new Pedina(“nera”), null, new Pedina(“nera”)

};

Pedina[] riga6 = {

new Pedina(“nera”),null, new Pedina(“nera”),null,

new Pedina(“nera”),null, new Pedina(“nera”),null

};

Pedina[] riga7 = {

null, new Pedina(“nera”), null, new Pedina(“nera”),

null, new Pedina(“nera”), null, new Pedina(“nera”)

};


 

dama[0] = riga0;

dama[1] = riga1;

dama[2] = riga2;

dama[3] = riga3;

dama[4] = riga4;

dama[5] = riga5;

dama[6] = riga6;

dama[7] = riga7;

 

Fonte: Java Mattone dopo Mattone

Storia del paradigma Object Oriented

L’idea di modellare applicazioni con oggetti piuttosto che funzioni, comparve per la prima volta nel 1967 con il rilascio del linguaggio “Simula”, prodotto in Norvegia da Ole-Johan Dahl e Kristen Nygaard.

Simula, linguaggio largamente utilizzato  per  sistemi  di  simulazione,  adottava  i  concetti  di  classe  ed ereditarietà.


Il termine “Object Oriented” fu utilizzato per la prima volta solo qualche anno dopo, quando la Xerox lanciò sul mercato il linguaggio Smalltalk sviluppato nei laboratori di Palo Alto.

Se  l’idea  iniziale di  introdurre un nuovo paradigma di programmazione non aveva  riscosso grossi  successi  all’interno della  comunità di programmatori,
l’introduzione del termine “Object Oriented” stimolò la fantasia degli analisti e negli  anni  immediatamente  a  seguire  videro  la  luce  un  gran  numero  di
linguaggi  di  programmazione  ibridi  come  C++  e  Objective-C,  oppure  ad oggetti puri come Eiffel.

Il decennio  compreso  tra  il 1970 ed  il 1980  fu decisivo per  la metodologia “Object  Oriented”.  L’introduzione  di  calcolatori  sempre  più  potenti  e  la successiva adozione di interfacce grafiche (GUI) prima da parte della Xerox e successivamente della Apple, spinse i programmatori ad utilizzare sempre di più  il nuovo approccio  in grado adattarsi con più semplicità alla complessità
dei  nuovi  sistemi  informativi.  Fu  durante  gli  anni  70’  che  la metodologia ”Object Oriented” guadagnò anche l’attenzione della comunità dei ricercatori poiché il concetto di ereditarietà sembrava potesse fornire un ottimo supporto alla ricerca sull’intelligenza artificiale.

Fu  proprio  questo  incredibile  aumento  di  interesse  nei  confronti  della programmazione ad oggetti che, durante gli anni successivi, diede vita ad una moltitudine di linguaggi di programmazione e di metodologie di analisi spesso contrastanti  tra  loro. Di  fatto, gli  anni 80’ possono  essere  riassunti  in una frase di Tim Rentsch del 1982:

“…Object  Oriented  programming  will  be  in  the  1980's  what  structured programming  was  in  the  1970's.  Everyone  will  be  in  favor  of  it.  Every manufacturer will promote his products as supporting it. Every manager will pay  lip service  to  it. Every programmer will practice  it  (differently). And no one will know just what it is.'' [Rentsch82]

“…la programmazione Object Oriented fu nel 1980 quello che fu nel 1970 la programmazione  strutturata.  Tutti  ne  erano  a  favore.  Tutti  i  produttori  di software promuovevano  le  loro soluzioni ed  i  loro prodotti a supporto. Ogni manager,  a  parole,  ne  era  favorevole.  Ogni  programmatore  la  praticava (ognuno  in  modo  differente).  Nessuno  sapeva  di  cosa  si  trattasse esattamente.”  [Rentsch82]

A  causa  dei  tanti  linguaggi  orientati  ad  oggetti,  dei molteplici  strumenti  a supporto, delle  tante metodologie di approccio e di analisi gli anni ottanta rappresentano quindi la torre di Babele della programmazione ad oggetti.

HelloWorld su Android 2.3.1 SDK con Eclipse 35 Galileo

Il sistema operativo mobile di Google è sempre più diffuso, quindi un buon informatico che si rispetti non può non provarlo, a maggior ragione se si è possessori di uno smartphone Android.

In teoria basta andare sul sito developers.android.com, scaricarsi la SDK e seguire la guida HelloWorld, in pratica c'é tutta una serie di passaggi indeterministici che si può riassumere brevevente con: un macello.

Vediamo di sbrogliare un po' la matassa. 

Android SDK

Si tratta di un insieme di librerie, emulatori e tool che permettono di sviluppare applicazioni per Android, la si scarica sempre dal sito sopra citato e tramite il comando ./tools/android è possibile scaricare e gestire diverse SDK in parallelo.

L'ultima SDK stabile disponibile è la 2.3.3 (ex 2.3.1), mentre Android 3.0 è solo una preview dedicata ai tablet, quindi non usatela per svilupparci sopra.

Eclipse IDE + ADT

Programmando in Ruby, un editor come Gedit è fantastico e leggero, purtroppo per programmare su Android è necessario un IDE come Eclipse (con tutti i suoi pro e contro).

La versione consigliata è Eclipse 35 Galileo con l'estensione ADT 9.0 (Android Development Tools), per installare quest'ultima bisogna impostare i repository in Eclipse correttamente e avere una connessione ad internet quanto più stabile, altrimenti avrete timeout ed errori di continuo. 

Il Repository GEF è una dipendenza di ADT, quindi prima di installato quest'ultimo dovete aver installato correttamente le dipendenze necessarie da GEF (WST *)


(prima di installare ADT controllate di avere tutte le dipendenze)

Se tutto è andato a buon fine dovreste vedere "Android Project" oltre ai tanti tipi di nuovi progetti Java.


Dopodiché dovete far sapere ad Eclipse dove avete scompattato la SDK Android inserendo il path nelle impostazioni.

HelloWorld Android

Bene, siete arrivati al dunque.

  • Riavviate il computer (giusto per evitare che Eclipse non vi abbia lasciato qualche pezzo in background)
  • Da terminale: sudo ./platform-tools/adb start-server
  • Aprite Eclipse (se invertite i passaggi vi trovate '???????????? no permissions', perché Eclipse lancia adb da utente normale)

Procedete con l'Hello World ufficiale.

A questo punto potete attaccare il telefono (in modalità Applicazioni DEBUG), premere il tastino play e decidere di provare l'applicazione sull' hardware fisico o virtuale (AVD).


L'emulatore AVD va impostato separatamente e può essere un dispositivo con una risoluzione e una SDK Android specifica. In alcune configurazioni l'emulatore è estremamente lento, quindi il dispositivo reale è vivamente consigliato.

Nell'attesa di uno sviluppo più funzionante OOB (Out of the box), per ora è tutto. Se avete dubbi o suggerimenti commentate.

Fonte: http://grigio.org/helloworld_android_2_3_1_sdk_eclipse_35_galileo

Guida base su JAVA ( 8 )

Programmazione concorrente

L'esecuzione di un programma java si divide in threads, o "processi leggeri". Questi frammenti di programma possono essere eseguiti indipendentemente (o quasi) dagli altri, ovvero contemporaneamente.

Il comportamento di un thread è implementato nella classe Thread, e l'esecuzione effettiva avviene nel suo metodo run().

Continue reading ‘Guida base su JAVA ( 8 )’ »