Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Motorola razr fold, dalla conchiglia al formato a libro. La recensione
Motorola razr fold, dalla conchiglia al formato a libro. La recensione
Abbiamo provato Motorola razr fold, il pieghevole a libro con display interno LTPO da 8,09 pollici, Snapdragon 8 Gen 5 e batteria da 6000 mAh in 243 grammi. Pennino e custodia sopno già nella confezione, per un foldable che si caratterizza per il pannello luminoso, l'autonomia ottima per la categoria e le fotocamere coerenti e ben sfruttabili. Il listino è di 1999 euro, ma in vendita si trova già a molto meno
Recensione Google Pixel Watch 5: sembra lo stesso, ma al polso la differenza si sente
Recensione Google Pixel Watch 5: sembra lo stesso, ma al polso la differenza si sente
Google Pixel Watch 5 ha affinato una formula già convincente con hardware più veloce, Gemini offline e nuovi strumenti per sport e benessere. Abbiamo provato la versione LTE da 41 mm, comoda anche di notte e ben proporzionata sui polsi piccoli. Il design resta un punto di forza, ma l'autonomia premia ancora il 45 mm e alcune funzioni AI non sono disponibili in Italia: ecco che cosa cambia rispetto a Watch 4 e quale formato conviene scegliere oggi
Nokia Innovation Day 2026: la sovranità europea passa dal mercato unico e dai laboratori italiani del gruppo
Nokia Innovation Day 2026: la sovranità europea passa dal mercato unico e dai laboratori italiani del gruppo
Politica, accademia e industria a confronto su mercato unico, sicurezza e competitività. Nei laboratori di Vimercate, Nokia ha mostrato le nuove generazioni di chip ottici e i test che ogni prodotto deve superare prima di arrivare sul mercato
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 14-04-2009, 13: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, 13: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, 13: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, 14: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, 14: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 14:26.
mindwings è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2009, 14: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, 14: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 14:59.
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Motorola razr fold, dalla conchiglia al formato a libro. La recensione Motorola razr fold, dalla conchiglia al formato ...
Recensione Google Pixel Watch 5: sembra lo stesso, ma al polso la differenza si sente Recensione Google Pixel Watch 5: sembra lo stess...
Nokia Innovation Day 2026: la sovranità europea passa dal mercato unico e dai laboratori italiani del gruppo Nokia Innovation Day 2026: la sovranità e...
In sella alla Fiido Nomads Pro: e-bike con motore centrale da 100 Nm per il divertimento a 360 gradi In sella alla Fiido Nomads Pro: e-bike con motor...
ASUS Zenbook 14 (UX3480AA): tanta autonomia con uno chassis bello e robusto ASUS Zenbook 14 (UX3480AA): tanta autonomia con ...
Starship: SpaceX potrebbe tentare di rec...
Federico Veronesi vince i Wildlife Photo...
Samsung Galaxy bloccati dopo l'aggiornam...
L'UE prolunga il periodo di test del pro...
Offerte Amazon di oggi: e-bike da 616€, ...
La missione cino-europea ESA Smile ha in...
Cisco sulle tracce dell’IA nei malware: ...
Nuovo Codice della strada: stop alla PEC...
Blue Origin Constellation Park: un nuovo...
E-bike da 615€ su Amazon: Bodywel F20PRO...
Windows 11 24H2, stop al supporto per Ho...
Gemini 4 Argon disponibile per tutti: co...
Sony avrebbe chiuso Overdrive, lo store ...
Abbiamo scattato con OPPO Find X10 Pro M...
Fino a 21 miliardi per i chip americani:...
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: 21:24.


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