Newsgroup: it.scienza.informatica
Titolo: componenti software

Salve,
Dovrei dare una definizione di "componente software" come tipo di dato
astratto, potete consigliarmi un sito o un libro su cui posso trovare
materiale adatto allo scopo??
Voi come fareste??
Ciao,
nigno

Dipende da cosa intendi per "componente software".

 Dipende da cosa intendi per "componente software".
Mi sono perso la discussione precedente.
Qual'era la domanda posta?

Un componente software non č un tipo di dato

 Un componente software non è un tipo di dato
Diciamo che è un tipo di dato molto ma molto complesso difficile da
definire, almeno per le mie conoscenze!



La domanda posta era se fosse possibile definire un componente
software come tipo di dato astratto.
Credo che sia possibile ma molto complesso quindi ho abbandonato l'idea.
comunque grazie lo stesso.
ciao

 Un componente software non č un tipo di dato
Si puo' dire che sia un oggetto? Perche?

> Si puo' dire che sia un oggetto? Perche?
Per quel poco che ne sò è piu comlesso di un oggetto.
Pensa af un EJB che è composto da più di una classe, quindi da più di
un oggetto,ci sono le interfaccie locali, le interfaccie remote...
Inoltre un componente può contenere anche procedure (quindi codice non ad
oggetti) al suo interno poiche il tutto è incapsulato all'interno del
componente stesso.
Io non ne so molto sono agli inizi quindi...

 > Un componente software non è un tipo di dato


Quando si parla di "oggetto" La differenza sostanziale è sempre il livello
di astrazione concettuale...
l'oggetto OOP è un istanza della Classe prototipo, l'oggetto CORBA è
tutt'altra cosa ( è un componente)
l'oggetto linguistico è una parola, frase etc ...;)
Comunque, detto OOP il comune paradigma ad oggetti:
L'oggetto OOP è l'istanza di una Classe, la cui interfaccia rappresenta un
tipo di dato astratto
(definito dall'insieme dei valori che può assumere e dalle operazioni
effettuabili su quei valori).
Le caratteristiche di tale paradigma sono distinte dal paradigma a
componenti:
Un componente software non è un'istanza di una Classe OOP => non è un
oggetto OOP.
Un componente software è un "sottosistema fisico sostituibile e
riutilizzabile" che ha
una "vita propria" ed è legato alla tecnologia che lo definisce e che
mediante un "Contenitore"
appunto ne gestisce il ciclo di vita, la persistenza etc.
Inoltre, l'interfaccia che deve implementare un componente, a differenza di
una Classe OOP,
non dipende solo dal contratto specificato nell'interfaccia per il dominio
del problema
( i metodi che la Classe deve avere per fornire funzionalità desiderate
rispetto ad un concetto, ad esempio,
una classe che gestisce i numeri complessi avrà metodi quali "getModulo()" ,
"getParteReale()" etc)
ma anche una serie di metodi per comunicare col container, per la
persistenza...etc
Il componente quindi rappresenta il fornitore attivo di un servizio ed è
sostituibile. Esso dipende
dall'infrastruttura che lo gestisce ( EJB, Active-X, Servlet, CORBA etc).
L'oggetto è invece l'istanza di una classe. Non è neanche un tipo di dato
astratto. La specifica della
Classe è un tipo di dato astratto.
Quando utilizzi una classe B entro una classe A, la classe B verrà compilata
e/o linkata, quando usi un componente C in una classe A, il componente non
viene compilato... esso è a tutti gli effetti un programma
"eseguibile" che collegato al suo contenitore diviene un servente... ad
esempio ADO di Microsoft è un componente gestito dal server Oledb .
Se la tecnologia è di tipo "distribuita" il componente è anche Rilocabile.
Te lo spiego con un esempio:
Quando in CORBA effettui la "creazione"(il norrowing) di un oggetto OOP, in
realtà
tu non solo non sai "Come" viene implementata l'interfaccia della classe di
cui hai chiesto l'istanza,
inoltre ti è nascosto anche "Chi" rappresenta quell'oggetto, nel senso che
un oggetto CORBA
può essere associato a + istanze della medesima classe OOP. Ciò ti permentte
di spostare
l'oggetto altrove ( nello spazio di indirizzamento) senza
riavviare/compilare etc.



 Si puo' dire che sia un oggetto? Perche?
Quando si parla di "oggetto" La differenza sostanziale è sempre il livello


 ne gestisce il ciclo di vita:
grazie delle risposte. Condivido, ma non completemante. Perche' il concetto
di componente deve essere necessariamente collegato ad aspetti tecnonologici?
Io credo che invece il componente sia un'astrazione tipica del livello del
design, e non solo dell'implementazione. In fase di design molto spesso la
tecnologia che si usera' non e' ancora nota!

> In fase di design molto spesso la tecnologia che si usera' non e' ancora
nota!
....certo, però non appartiene al design delle classi, in quanto è un
programmino già fatto...
in più già sai di dover utilizzare una determinata tecnologia, a prescindere
dal linguaggio che
userai per sviluppare le classi di proggettazione...quindi è molto legato
all'infrastruttura software
che utilizzarai..
Alcune osservazioni:
1. Se per un momento poi pensiamo di sviluppare un componente
tipo..EJB..allora ci rendiamo
subito conto che il dominio del problema cambia drasticamente...Ciò implica
necessariamente
una netta diversità del livello d'astrazione...;)
2. Se cambi tecnologia, cambierai solo la parte di codice che fa da ponte
tra gli oggetti sviluppati
in un determinato linguaggio ed il componente cambiato...se cambi linguaggio
di programmazione, invece,
cambia tutto ciò che hai sviluppato ma non il componente...anche ciò demarca
la diversità dei
due paradigmi...
3.Il paradigma a componenti è un evoluzione del paradigma ad oggetti, ergo
tutte le affinità e le
diversità date dalla necessità del riutilizzo non di codice ma di
funzionalità.
La distinzione non è molto marcata dalla letteratura [purtroppo l'ingegneria
del software non è così
deterministica come la parola "Ingegneria" lascia pensare :(  ] ,
Penso che la cosa precisa che si può affermare è semplicemente che esso non
è un oggetto in quanto
non è istanza di una classe e che è legato ad un'infrastruttura software che
in fa sia da server che da
gestore della persistenza e ciclo di vita
Ho dato un'occhiata al mio vecchio libro "Principi di ingegneria del
software"...uno schifo di libro...
....peggio di quanto abbiamo detto noi!ahhh!...ricordo quell'esame...ma che
era parafilosofia!?!
Se non era per le metriche...bla!...Scusa la digressione...;)
Ciao

 Se non era per le metriche...bla!...Scusa la digressione...;)
Per le metriche ho usato prevalentemente Fenton, il quale non e' piu' aggiornato...
Ciao
HH