Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo
Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo
Per diversi giorni il Galaxy S26 Ultra di Samsung è stato il nostro compagno di vita. Oltre alle conferme del colosso coreano come la qualità del display e una suite AI senza rivali, arriva il Privacy Display, un unicum nel mondo smartphone. Ci sono ancora alcuni gap che non sono riusciti a colmare lato batteria e fotocamera, seppur con alcuni miglioramenti.
Diablo II Resurrected: il nuovo DLC Reign of the Warlock
Diablo II Resurrected: il nuovo DLC Reign of the Warlock
Abbiamo provato per voi il nuovo DLC lanciato a sorpresa da Blizzard per Diablo II: Resurrected e quella che segue è una disamina dei nuovi contenuti che abbiamo avuto modo di sperimentare nel corso delle nostre sessioni di gioco, con particolare riguardo per la nuova classe dello Stregone
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup
Siamo tornati nel parco tecnologico di Trieste per il kick-off del programma che mette a disposizione di cinque startup le infrastrutture di ricerca, dal sincrotrone Elettra ai laboratori di genomica e HPC. Roberto Pillon racconta il modello e la visione
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 14-04-2009, 14:10   #1
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
[C#]Dubbio Interfacce/ereditarietà

Ciao

Riprendo un 3d che non riesco più a trovare che ho aperto qualche tempo fa (sorry).

Ho un grosso dubbio sulla comprensione del concetto di interfaccia.

In sostanza, dovendo gestire delle anagrafiche (di tipi diversi), stavo ragionando così:

Codice:
interface IAnagrafica
{
   void add(Anagrafica anagrafica);
   void update(Anagrafica anagrafica);
   void deleteLogical(Anagrafica anagrafica);
   Anagrafica getById(int id);
   Anagrafica getByFilter(string filter);
   ICollection<Anagrafica> getByDomain(string domain);
}
Codice:
public class Anagrafica : IAnagrafica
{

     //iniziano i dubbi:
}
...con la premessa che so che devo implementare tutti i metodi che sono presenti nell'interfaccia.....


Ho due tipi di anagrafica: Anagrafica Persone e Anagrafica Fornitori

Seguendo la regola "is-a", AnagraficaPersone e AnagraficaFornitori, seppur abbiano pochi campi in comune "sono" oggetti di tipo Anagrafica. Ho pensato quindi che :

Codice:
public class AnagraficaPersone : Anagrafica
{
}

public class AnagraficaFornitori : Anagrafica
{
}
Non ho ancora ben chiaro come debba definire l'entità generica "Anagrafica".

Pensavo di definire in Anagrafica solo ciò che ho definito nell'interfaccia, e successivamente, far ereditare i metodi di Anagrafica ad AnagraficaPersone ed AnagraficaFornitori. I campi di queste ultime però, essendo diversi fra di loro, li avrei definiti solo al loro interno.

Che ne pensate?

Grazie

RaouL.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2009, 14:26   #2
qwerty86
Senior Member
 
L'Avatar di qwerty86
 
Iscritto dal: Jun 2007
Messaggi: 1232
Si credo vada bene così!
__________________
Cpu: Amd 64 X2 5200+ - Mobo:M2N32SLI DELUXE - Ram: Corsair xms2 800 mhz kit 4gb - SK Video: Gaiward GTS250 - Ali : Enermax Liberty 500 Wat - Mast DVD: 2 Nec AD-5170A - Case : Thermaltake Armor+ - Dissipatore: Thermaltake V1 Notebook: Sony Vaio VGN-Fe21M-Pda: Htc Diamond |Il mio sito|Flickr| Stanco del solito forum? Vieni a parlare di fotografia su Fotoni
qwerty86 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2009, 14:52   #3
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Ciò che devi definire nell'interfaccia Anagrafica non è l'insieme delle caratteristiche comuni a tutte le classi che sono delle anagrafiche ma l'insieme delle caratteristiche necessarie affinchè degli oggetti di tipo anagrafica possano "comunicare" con oggetti di tipo diverso senza perdere la propria identità esclusiva.

Tutte queste caratteristiche saranno anche le caratteristiche che avranno le anagrafiche.

Senza un'idea di come siano fatti gli oggetti che devono usare le anagrafiche ogni insieme di caratteristiche comuni a tutte le anagrafiche concrete è valido.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2009, 15:05   #4
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Bene...

ho ampliato così:

Codice:
using System;
using System.Collections.Generic;
using System.Text;
using Employees.Interfaces;

namespace Employees.Entities
{
    public class Anagrafica : IAnagrafica
    {
        private int id;
        private string filter;
        private string kind;
        private bool isActive;

        public int Id
        {
            get { return id; }
            set { id = value; }
        }

        public string Filter
        {
            get { return filter; }
            set { filter = value; }
        }

        public string Kind
        {
            get { return kind; }
            set { kind = value; }
        }

        public bool IsActive
        {
            get { return isActive; }
            set { isActive = value; }
        }

        public void Add(Anagrafica anagrafica)
        {
            throw new NotImplementedException();
        }

        public void Update(Anagrafica anagrafica)
        {
            throw new NotImplementedException();
        }

        public void RemoveLogical(Anagrafica anagrafica)
        {
            throw new NotImplementedException();
        }

        public Anagrafica GetById(int id)
        {
            throw new NotImplementedException();
        }

        public Anagrafica GetByFilter(string filter)
        {
            throw new NotImplementedException();
        }

        public ICollection<Anagrafica> GetByKind(string kind)
        {
            throw new NotImplementedException();
        }

    }
}
Codice:
using System;
using System.Collections.Generic;
using System.Text;

namespace Employees.Entities
{
    public class AnagraficaDipendenti : Anagrafica
    {


        #region Incapsulamento

        private string nome;
        private string cognome;
        private string sesso;
        private DateTime dataNascita;
        private string comuneNascita;
        private string provinciaNascita;
        private string stato;
        private string codiceFiscale;
        private string comuneResidenza;
        private string provinciaResidenza;
        private string indirizzo;
        private string cap;
        private string email;

        public virtual string Nome
        {
            get { return nome; }
            set { nome = value; }
        }

        public virtual string Cognome
        {
            get { return cognome; }
            set { cognome = value; }
        }

        public virtual string Sesso
        {
            get { return sesso; }
            set { sesso = value; }
        }

        public virtual DateTime DataNascita
        {
            get { return dataNascita; }
            set { dataNascita = value; }
        }

        public virtual string ComuneNascita
        {
            get { return comuneNascita; }
            set { comuneNascita = value; }
        }

        public virtual string ProvinciaNascita
        {
            get { return provinciaNascita; }
            set { provinciaNascita = value; }
        }

        public virtual string Stato
        {
            get { return stato; }
            set { stato = value; }
        }

        public virtual string CodiceFiscale
        {
            get { return codiceFiscale; }
            set { codiceFiscale = value; }
        }

        public virtual string ComuneResidenza
        {
            get { return comuneResidenza; }
            set { comuneResidenza = value; }
        }

        public virtual string ProvinciaResidenza
        {
            get { return provinciaResidenza; }
            set { provinciaResidenza = value; }
        }

        public virtual string Indirizzo
        {
            get { return indirizzo; }
            set { indirizzo = value; }
        }

        public virtual string Cap
        {
            get { return cap; }
            set { cap = value; }
        }

        public virtual string Email
        {
            get { return email; }
            set { email = value; }
        }

        #endregion

        #region Costruttori
        
        public AnagraficaDipendenti()
        {
        }

        public AnagraficaDipendenti(string cognome, string nome, string sesso,
            DateTime dataNascita, string comuneNascita, string provinciaNascita,
            string stato, string codiceFiscale, string comuneResidenza,
            string provinciaResidenza, string indirizzo, string cap, string email,
            bool isActive)
        {
            this.cognome = cognome;
            this.nome = nome;
            this.sesso = sesso;
            this.dataNascita = dataNascita;
            this.comuneNascita = comuneNascita;
            this.provinciaNascita = provinciaNascita;
            this.stato = stato;
            this.codiceFiscale = codiceFiscale;
            this.comuneResidenza = comuneResidenza;
            this.provinciaResidenza = provinciaResidenza;
            this.indirizzo = indirizzo;
            this.cap = cap;
            this.email = email;
        }
        #endregion

        #region Methods
        
        #endregion



    }
}
Non riesco a capire come implementare il metodo "Add" di Anagrafica per AnagraficaDipendente.

Grazie mille

RaouL.


P.S.:

@PGI-Bis : non avevo ancora letto il tuo commento .
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2009, 15:19   #5
mindwings
Senior Member
 
L'Avatar di mindwings
 
Iscritto dal: Dec 2005
Messaggi: 1278
Quote:
Originariamente inviato da RaouL_BennetH Guarda i messaggi
Ciao

Riprendo un 3d che non riesco più a trovare che ho aperto qualche tempo fa (sorry).

Ho un grosso dubbio sulla comprensione del concetto di interfaccia.

In sostanza, dovendo gestire delle anagrafiche (di tipi diversi), stavo ragionando così:

Codice:
interface IAnagrafica
{
   void add(Anagrafica anagrafica);
   void update(Anagrafica anagrafica);
   void deleteLogical(Anagrafica anagrafica);
   Anagrafica getById(int id);
   Anagrafica getByFilter(string filter);
   ICollection<Anagrafica> getByDomain(string domain);
}
Non ho capito il significato dei metodi, stando alla definizione di wikipedia
un'anagrafica e' un archivio contenente i dati anagrafici del soggetto interessato. Ad un'anagrafica e' possibile aggiungere un'altra anagrafica? (metodo add?) Che significa deleteLogical?
Il fatto che ci siano poi 3 metodi get mi fa pensare che IAnagrafica e'solo un'involucro a piu' Anagrafiche(Ma l'anagrafica non e' unica?)...


EDIT: Ho appena visto l'implementazione... Tutti quei private mi sembrano inutili dato che fornisci le chiavi d'accesso e modifica get e set potresti mettere
direttamente i campi come public...
__________________
Non esistono grandi uomini, solo grandi ambizioni , realizzate da qualcuno che si è alzato dalla sedia per realizzarle!

Ultima modifica di mindwings : 14-04-2009 alle 15:26.
mindwings è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2009, 15:24   #6
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da RaouL_BennetH Guarda i messaggi
Riprendo un 3d che non riesco più a trovare che ho aperto qualche tempo fa (sorry).
Eccoti il link, casomai ti servisse ancora: http://www.hwupgrade.it/forum/showthread.php?t=1956932
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2009, 15:31   #7
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Quote:
Originariamente inviato da mindwings Guarda i messaggi
Non ho capito il significato dei metodi, stando alla definizione di wikipedia
un'anagrafica e' un archivio contenente i dati anagrafici del soggetto interessato. Ad un'anagrafica e' possibile aggiungere un'altra anagrafica? (metodo add?) Che significa deleteLogical?
Il fatto che ci siano poi 3 metodi get mi fa pensare che IAnagrafica e'solo un'involucro a piu' Anagrafiche(Ma l'anagrafica non e' unica?)...
Forse il nome che ho usato per l'interfaccia non è il più azzeccato.

con add e deleteLogical intendevo semplicemente aggiungere un'anagrafica che può essere di due tipi:

add(AnagraficaPersona)
oppure
add(AnagraficaFornitore)

ma le potrei anche chiamare semplicemente: Persona e Fornitore.

Per i metodi get:
mi sembrava il minimo utilizzare un metodo che mi identificasse il record. Per lo stringFilter invece, ho pensato che un utente potrebbe fare una ricerca su un qualsiasi campo di un'anagrafica e quindi, anzichè preventivare un "where or, or, or" per ciascuna campo, passo di volta in volta il valore selezionato dall'utente.

per il 'deleteLogical' intendo semplicemente non fare mai una cancellazione fisica ma settare a false o a zero un campo. Dove questo campo ha valore false, il record non verrà restituito ma potrà successivamente essere riattivato.


EDIT:

aggiungo anche che:

l'applicazione si interfaccia ad un db.
Nel db ci sono diversi tipi di anagrafiche(servizi, fornitori, contatti, dipendenti, etc..)
Per questo mi sembrava buona l'idea di avere una interfaccia implementata da un'unica classe base (anagrafica) e che le altre estendessero quest'ultima.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek

Ultima modifica di RaouL_BennetH : 14-04-2009 alle 15:59.
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo Recensione Samsung Galaxy S26 Ultra: finalmente ...
Diablo II Resurrected: il nuovo DLC Reign of the Warlock Diablo II Resurrected: il nuovo DLC Reign of the...
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup Deep Tech Revolution: così Area Science P...
HP OMEN MAX 16 con RTX 5080: potenza da desktop replacement a prezzo competitivo HP OMEN MAX 16 con RTX 5080: potenza da desktop ...
Recensione Google Pixel 10a, si migliora poco ma è sempre un'ottima scelta Recensione Google Pixel 10a, si migliora poco ma...
NVIDIA promette un salto enorme: path tr...
Il meglio di Amazon in 23 articoli: supe...
Questo portatile MSI da 16" OLED 38...
DirectX, prove tecniche di futuro: machi...
Le analisi di ALMA sulla cometa interste...
La missione cinese Tianwen-3 per portare...
Un satellite di HEO Space ha catturato u...
Mini LED 144Hz a prezzo folle: questo Hi...
Novità per Fortinet: arrivano For...
Volkswagen e Xpeng, il SUV è real...
Volkswagen ribattezza ID.3 e le dà un mo...
Aruba rende disponibile VMware Hosted Pr...
Questa Olympus da 20 MP con stabilizzazi...
Il nuovo dispositivo di Rabbit si chiama...
'Se avete RAM, siamo pronti ad acquistar...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 09:28.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v