Re: come astrarre un problema reale in OOP
|
- Subject: Re: come astrarre un problema reale in OOP
- From: enoquick
- Data: Tue, 01 Jul 2008 21:58:59 +0200
- Newsgroups: it.comp.programmare.win32
f22 ha scritto:
> ciao
>
>
> da poco studio OOP
>
> mi chiedevo se esistono delle 'best pratices' per approciare ad un
> problema reale convertendolo nelle relative entità CLASSI METODI
> PROPRIETA'.
>
>
> Esempio
>
> viso che tutti partono dall'esempio MAMMIFERI classe base e poi giu di
> li con le classi figlie dove si specificano i vari mammiferi nel
> dettaglio...io vorrei seguire un esempio differente.
>
> prendiamo il concetto di DIPENDENTE di un ' ipotetica azienda
> tenendo presente che una figura tale deve possedere minimo
> nome,cognome,matricola,settore,posizione, e che posso trovare
> dall'amministrativo, al magazziniere, al progettista....
>
> io farei in (c#)
>
> enum Settore
> {
> amministrativo,
> progettazione,
> falegnameria,
> magazzino,
> spedizioni
> }
>
> enum Posizione
> {
> operaio,
> contabile,
> progettista,
> magazziniere,
> trasportatore
>
> }
>
> Class Dipendente
> {
> private string nome = "";
> private string cognome = "";
> private string matricola = "";
> private string settore = "";
> private string posizione = "";
>
> public Dipendente(string nome,string cognome,string matricola,string
> settore,string posizione)
> {
> this.nome = nome;
> this.cognome = cognome;
> this.matricola = matricola;
> this.settore = settore;
> this.posizione = posizione;
>
> }
>
> private void MemorizzaDati()
> {
> //fai qualcosa;
> }
>
> }
>
> come aproccio al problema com'e' ?
>
> un amico con cui studio mi suggeriva di creare una classe BASE e poi
> creare una Classe per ogni entità
>
> quindi ad esempio
>
>
> Class Operaio:Dipendente
> {
>
>
> }
>
>
> Che ne dite?
>
>
> grazie
L' approccio che hai usato non è sbagliato , ha solo lo svantaggio di
essere poco flessibile in certi casi.
Non solo, le operazioni simili (Es: calcola_stipendio() )
devono essere implementate con tante if quanti sono la tipologia dei
dipendenti e in un programma complesso possono essere sparse per il codice.
Molto meglio è implementare una classe base (magari astratta perchè non
puo esistere un dipendente generico) ,derivare le singole classi tipo
operaio, contabile ,ecc.. e implementare il metodo calcola_stipendio()
in ogni singola classe; in piu implementare gli attributi specifici
per ogni singola classe.
Naturalmente il metodo calcola_stipendio nella classe dipendente sarà
astratto perchè non ha senso calcolarlo.
L' attributo Settore può essere un' enum se è un attributo passivo, e a
dire il vero, la stessa cosa puo anche essere Posizione se fosse
passiva ed ogni tipologia di dipendenti non avesse attributi aggiuntivi.
In sostanza l' implementazione dipende tutto dal problema che devi
risolvere.