Indice del forum Olimpo Informatico
I Forum di Zeus News
Leggi la newsletter gratuita - Attiva il Menu compatto
 
 FAQFAQ   CercaCerca   Lista utentiLista utenti   GruppiGruppi   RegistratiRegistrati 
 ProfiloProfilo   Messaggi privatiMessaggi privati   Log inLog in 

    Newsletter RSS Facebook Twitter Contatti Ricerca
differenza tra classe e oggetto....
Nuovo argomento   Rispondi    Indice del forum -> Programmazione
Precedente :: Successivo  
Autore Messaggio
franco.ab
Dio minore
Dio minore


Registrato: 17/11/08 11:52
Messaggi: 666

MessaggioInviato: 30 Mar 2011 19:54    Oggetto: differenza tra classe e oggetto.... Rispondi citando

Salve,sto leggendo il manuale introduttivo di Small Basic(un compilatore gratuito per principianti della microsoft che è un riassunto del visual basic) in cui dice:” TextWindow, nel nostro programma, è un oggetto. Esistono diversi oggetti da utilizzare nei nostri programmi. Possiamo realizzare diverse operazioni su questi oggetti.”.
Invece nel programma vero e proprio dice nell’help che descrive i vari comandi:” TextWindow: La finestra Testo fornisce funzionalità di input e output di tipo testo. Ad esempio, utilizzando questa classe è possibile scrivere o leggere testo o numeri nella/dalla finestra di testo.” Ho capito che TextWindows è quel rettangolino nero dove si evidenziano gli input e gli output del programma…ma è un oggetto o una classe?Non ho le idee molto chiare su questi 2 concetti…ho solo sentito dire che l’oggetto è un istanza della classe…quindi 2 cose diverse…perché in Small Basic sono usate quasi come sinonimi?
Grazie
Top
Profilo Invia messaggio privato
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 20:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 30 Mar 2011 23:14    Oggetto: Rispondi citando

Ciao,
come hai detto tu un oggetto è un'istanza di una classe.
Questo è vero sempre: puoi vedere la classe come un tipo dato complesso e l'oggetto come una variabile di quel tipo.

O il manuale è tradotto male oppure ha parlato in senso lato di oggetto.
Top
Profilo Invia messaggio privato
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 11:16
Messaggi: 11568
Residenza: Tokelau

MessaggioInviato: 31 Mar 2011 10:15    Oggetto: Rispondi citando

pensa alla classe come alla definizione di un oggetto, mentre invece un oggetto 'vero' è un esemplare (istanza) di quella classe.

ad esempio la Fiat 500. Il nome indica un modello specifico, con le sue caratteristiche: questa è la classe. Poi se tu te ne compri una, allora quella (oggetto) è un istanza, ovvero un esemplare, della classe sopra definita.
Top
Profilo Invia messaggio privato HomePage
franco.ab
Dio minore
Dio minore


Registrato: 17/11/08 11:52
Messaggi: 666

MessaggioInviato: 31 Mar 2011 12:20    Oggetto: Rispondi citando

...quindi hanno ragione sia nel manuale che nel programma!nel senso che TextWindows è una classe però quando vado ad usarla non mi rifersco ad una definizione ma ad un qualcosa di vero,quindi diventa oggetto...è così?
A proposito del esempio della classe fiat 500...ci sono tanti tipi di 500,con cilindrate,optional e colori diversi...quindi in effetti ci sono tanti oggetti 500 pur rimanendo sempre una fiat 500...invece la classe TextWindows è sempre la stessa finestrella che da input e output,come fa a differenziarsi in oggetti diversi?
ciao
Top
Profilo Invia messaggio privato
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 20:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 31 Mar 2011 13:04    Oggetto: Rispondi citando

Introdurre il concetto di programmazione ad oggetti non è proprio banale soprattutto se si vuole restare terra terra.
La classe è una delle cose più potenti che ci sia nella programmazione.
Essa è formata da proprietà e da metodi.
Le proprietà sono delle variabili al suo interno che la definiscono mentre i metodi sono funzioni che descrivono il suo funzionamento.
Una fiat 500 (vista a livello in cui la stai vedendo tu) è sempre lei mentre la cilindrata, il tipo di motore etc... sono tutte proprietà.
Se tu hai una classe Fiat500, al suo interno di sicuro avrai anche le proprietà suddette che verranno impostate nelle singole istanze.
Tieni conto che uno degli aspetti fondamentali dell' Oop è l'ereditarietà: tu puoi creare classi che ereditano proprietà e comportamenti da un'altra (o da altre).
Volendo pignolare un po' avremmo che Fiat500 deriva da Automobile.
Oppure Che Fiat500Benzina e Fiat500Diesel derivano da Fiat500 che deriva da Automobile nel caso volessimo andare a distinguere bene le fiat500 diesel da quelle a benzina.
A loro volta queste classi saranno formate da tante altre classi, le ruote, il motore, i sedili etc...

La tua classe TextBox deriva sicuramente da una classe più generica e così via fino probabilmente ad una classe Object generica (penso, non conosco la piattaforma che stai usando) da cui deriva tutto.

Pian pianino scoprirai come estendere le classi basi che usi per esempio per ottenere una TextBoxConTestoScorrevole...
Top
Profilo Invia messaggio privato
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 11:16
Messaggi: 11568
Residenza: Tokelau

MessaggioInviato: 31 Mar 2011 14:38    Oggetto: Rispondi citando

@free: adesso sono curioso di sapere come esporresti il polimorfismo, l'ereditarietà multipla e il sovraccarico (override) sempre usando la Fiat500 Wink Very Happy
Top
Profilo Invia messaggio privato HomePage
franco.ab
Dio minore
Dio minore


Registrato: 17/11/08 11:52
Messaggi: 666

MessaggioInviato: 31 Mar 2011 20:15    Oggetto: Rispondi citando

ok...adesso ho le idee un pò più chiare...se ho altri dubbi vi faccio sapere.
grazie amici...ciao
Top
Profilo Invia messaggio privato
franco.ab
Dio minore
Dio minore


Registrato: 17/11/08 11:52
Messaggi: 666

MessaggioInviato: 02 Apr 2011 12:20    Oggetto: Rispondi citando

Sto proseguendo nello studio e ho trovato altre classi ed oggetti...e credo di stare capendo la filisofio object oriented...ma vorrei chiedervi una cosa:un oggetto potremo definirlo come un qualcosa di bello e pronto che possiamo inserire in un nostro programma?
ciao
Top
Profilo Invia messaggio privato
whitesquall
Amministratore
Amministratore


Registrato: 26/06/07 14:03
Messaggi: 8413

MessaggioInviato: 02 Apr 2011 13:20    Oggetto: Rispondi citando

Oddio, proprio "bello e pronto" non direi... Diciamo che se la classe di cui l'oggetto è esemplare è già stata scritta da qualcun altro hai meno lavoro da fare, forse intendevi questo?
Nel momento in cui tu inserisci un oggetto nel tuo programma sai di avere un'entità su cui potrai utilizzare i vari metodi di esemplare scritti all'interno della classe.

Se posso darti un consiglio, affianca allo studio teorico esercitazioni pratiche altrimenti classe, oggetto e metodo rischiano di rimanere concetti astratti e non del tutto chiari...
Soprattutto cerca di fare un passo alla volta, in modo che quando effettivamente arrivi a scrivere un classe sai cosa fai e soprattutto perché lo fai.
Top
Profilo Invia messaggio privato
franco.ab
Dio minore
Dio minore


Registrato: 17/11/08 11:52
Messaggi: 666

MessaggioInviato: 02 Apr 2011 14:41    Oggetto: Rispondi citando

Ciao,ora spiego meglio quello che volevo dire:in small basic ci sono ad esempio la classe clock(che fornisce accesso all'orologio di sistema,tale classe ha 11 proprietà)e la classe math(con 1 proprietà e molto metodi).Se io metto in un programma "If (Clock.Hour < 12) Then..." Clock.Hour non è un oggetto?
Oppure se uso math.abs(-5) o math.power mi calcola il valore assoluto o la potenza di un numero,invece in pascal feci io un programmino per calcolare la potenza di un numero...math.abs(-5) o math.power non sono oggetti?
In questo senso ho affermato che gli oggetti sono belli e pronti da inserire nel nostro programma...ma non sono sicuro che la mia definizione sia esatta,perchè non ho ben capito se clock.hour,math.abs sono oggetti!Cioè clock.hour è un istanza della classe clock?
Non so se ho espresso bene il mio dubbio?
ciao
Top
Profilo Invia messaggio privato
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 20:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 02 Apr 2011 15:19    Oggetto: Rispondi citando

In volata (poi risponderò anche a SverX)...
Dunque, la programmazione ad oggetti è nata per far fronte alla complessità sempre maggiore dei programmi.
Se non esistessero l'ereditarietà, l'override e altre cosine, la classe sarebbe di fatto solo una scatola che contiene metodi e proprietà. Invece con tutto quello che è stato costruito la classe e quindi poi gli oggetti istanziati, rappresentato entità complesse con un comportamento vero e proprio.
Devi immaginare la classe tutta insieme e non solo come involucro.

Ora, pigliando i tuoi esempi: da quello che vedo Clock secondo me è una classe statica che tu usi senza istanziare perchè l'orologio di sistema è uno solo e non possono essercene due.
Una classe statica è una classe che contiene almeno un metodo statico o una proprietà statica: statica significa che tutte le istanze della classe condividono quella proprietà o quel metodo.
Una classe che contiene tutti metodo e tutte proprietà statiche non potrà essere istanziata ma dovrà essere usata, permettimi il termine, direttamente.
Scrivere "Clock.Hour" vuol dire accedere alla proprietà statica Hour della classe Clock, quindi tu in questo momento stai usando la classe Clock (nessun oggetto!) e vuoi vedere il valore di quella proprietà.
Idem con Math.

Tu hai a disposizione queste classe perchè il framework che usi le mette a disposizioni, se non ci fossero sei tu che dovresti scriverle quando ti servono.
E' chiaro che la classe è per sua natura portabile quindi diventa semplice creare una libreria da usare nei vari programmi.
A differenza delle semplici funzioni che diventano più difficili da portare in giro man mano che la loro complessità cresce.
Per portabilità intendo che tu scrivi la tua classe e poi la usi secca nei programmi; se questa deve essere adattata non andrai a cambiare il suo codice ma dovrai estenderla.
Un buon programma è fatto in modo che le modifiche successive (a meno di cambi nel core) sia fatte solo estendendolo e non modificandolo.
Uno dei best practice dell'oop afferma che una volta che un metodo è scritto questo non dovrà più esser cambiato a meno che non cambi lui stesso il suo comportamento.
Deve essere però aperto alle estensioni.

Comunque senza star qui a divagare, per rispondere bene alla tua domanda:
Clock.Hour è un oggetto? No, Clock è una classe e Hour è una sua proprietà.
Se invece (e qui piglio php per far prima) scriviamo:
Codice:

class Pippo
{
public $nome;
public $cognome;
public function __construct($n,$c)
{
$this->nome=$n;
$this->cognome=$c;
}
}

...

$p=new Pippo('Ciccio','Pasticcio');

print $p->nome;


nel codice qui sopra $p è un oggetto e $p->nome una sua proprietà.

Pensa ad una classe come ad un qualcosa che ti permette di modellare qualunque concetto reale e non.
Top
Profilo Invia messaggio privato
franco.ab
Dio minore
Dio minore


Registrato: 17/11/08 11:52
Messaggi: 666

MessaggioInviato: 02 Apr 2011 17:31    Oggetto: Rispondi

ok...in effetti non c'era scritto che clock.hour è un oggetto,c'era solo scritto che clock è una classe con delle proprietà...io ho immaginato che clock.hour potesse essere un oggetto.
Grazie dei chiarimenti....ciao
Top
Profilo Invia messaggio privato
Mostra prima i messaggi di:   
Nuovo argomento   Rispondi    Indice del forum -> Programmazione Tutti i fusi orari sono GMT + 1 ora
Pagina 1 di 1

 
Vai a:  
Non puoi inserire nuovi argomenti
Non puoi rispondere a nessun argomento
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi votare nei sondaggi