Precedente :: Successivo |
Autore |
Messaggio |
franco.ab Dio minore
Registrato: 17/11/08 11:52 Messaggi: 666
|
Inviato: 30 Mar 2011 19:54 Oggetto: differenza tra classe e oggetto.... |
|
|
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 |
|
|
freemind Supervisor sezione Programmazione
Registrato: 04/04/07 20:28 Messaggi: 4643 Residenza: Internet
|
Inviato: 30 Mar 2011 23:14 Oggetto: |
|
|
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 |
|
|
SverX Supervisor Macchinisti
Registrato: 25/03/02 11:16 Messaggi: 11568 Residenza: Tokelau
|
Inviato: 31 Mar 2011 10:15 Oggetto: |
|
|
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 |
|
|
franco.ab Dio minore
Registrato: 17/11/08 11:52 Messaggi: 666
|
Inviato: 31 Mar 2011 12:20 Oggetto: |
|
|
...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 |
|
|
freemind Supervisor sezione Programmazione
Registrato: 04/04/07 20:28 Messaggi: 4643 Residenza: Internet
|
Inviato: 31 Mar 2011 13:04 Oggetto: |
|
|
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 |
|
|
SverX Supervisor Macchinisti
Registrato: 25/03/02 11:16 Messaggi: 11568 Residenza: Tokelau
|
Inviato: 31 Mar 2011 14:38 Oggetto: |
|
|
@free: adesso sono curioso di sapere come esporresti il polimorfismo, l'ereditarietà multipla e il sovraccarico (override) sempre usando la Fiat500 |
|
Top |
|
|
franco.ab Dio minore
Registrato: 17/11/08 11:52 Messaggi: 666
|
Inviato: 31 Mar 2011 20:15 Oggetto: |
|
|
ok...adesso ho le idee un pò più chiare...se ho altri dubbi vi faccio sapere.
grazie amici...ciao |
|
Top |
|
|
franco.ab Dio minore
Registrato: 17/11/08 11:52 Messaggi: 666
|
Inviato: 02 Apr 2011 12:20 Oggetto: |
|
|
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 |
|
|
whitesquall Amministratore
Registrato: 26/06/07 14:03 Messaggi: 8413
|
Inviato: 02 Apr 2011 13:20 Oggetto: |
|
|
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 |
|
|
franco.ab Dio minore
Registrato: 17/11/08 11:52 Messaggi: 666
|
Inviato: 02 Apr 2011 14:41 Oggetto: |
|
|
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 |
|
|
freemind Supervisor sezione Programmazione
Registrato: 04/04/07 20:28 Messaggi: 4643 Residenza: Internet
|
Inviato: 02 Apr 2011 15:19 Oggetto: |
|
|
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 |
|
|
franco.ab Dio minore
Registrato: 17/11/08 11:52 Messaggi: 666
|
Inviato: 02 Apr 2011 17:31 Oggetto: |
|
|
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 |
|
|
|