Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    pensare ad oggetti.costruzione oggetto

    salve mi si chiede di risolvere il seguente esercizio. (badate bene che non voglio la soluzione ma consigli su come arrivarci e come abituarmi a pensare ad oggetti)

    Si vuole realizzare un programma per la gestione di un agenda telefonica.
    Per ogni persona sono previste le seguenti informazioni personali:

    Cognome
    Nome
    Titolo
    Indirizzo di posta elettronica (non puo contenere spazi bianchi e deve contenere il simbolo @)
    Azienda
    Posizione

    Per ogni persona è possibile memorizzare i seguenti numeri di telefono (uno per ogni categoria)
    Abitazione
    Ufficio
    Cellulare.

    È inoltre possibile memorizzare una lista di altri numeri telefonici.
    Per ciascuno degli altri numeri bisogna memorizzare oltre ad il numero di telefono una descrizione del numero.

    Implementare una classe persona che consenta di modellare tale realtà e una classe agenda che rappresenta una lista di persone.
    Il mio problema è come modellizzare il concetto di numero.o meglio come potrei realizzare i diversi tipi di numeri: abitazione,ufficio, cellulare ed inoltre anche il tipo altro numero?
    io ho pensato di creare l'oggetto numero

    codice:
    public class Phone {
    		
    	private String  phone;
    	private String description;
    	
    	public Phone(String phone,String description)
    	{
    		this.phone=phone;
    		this.description=description;
    	}
    	
    	public String getPhone()
    	{
    		return phone;
    	}
    
    	public String getDescription()
    	{
    		return description;
    	}
    	
    	
    }
    e poi modellizzare la classe Persona in questa maniera:

    codice:
    import java.util.*;
    
    public class Person {
    	
    	private String Name;
    	private String surname;
    	private String title;
    	private String mail_addr;
    	private String company
    	private String position;
    	private Phone homePhone;
    	private Phone officePhone;
    	private Phone mobilePhone;
    	private Collection<Phone> otherphonesList;
    	
    	public Person(String n,String s,String t,String m,String c,String p,Phone hp,Phone of,Phone mp,Collection<Phone> otherphones)
    	{
    		name=n;
    		surname=s;
    		title=t;
    		mail_addr=m;
    		company=c;
    		position=p;
    		homePhone=hp;
    		officePhone=of;
    		mobilePhone=mp;
    		otherphonesList=new ArrayList<Phone>(otherphones);
    		
    	}
    	
    	public String getName()
    	{
    		return name;
    	}
    	
    	public String getSurname()
    	{
    		return surname;
    	}
    	
    	public String getTitle()
    	{
    		return title;
    	}
    	
    	public String getMail()
    	{
    		return mail_addr;
    	}
    	
    	public String getCompany()
    	{
    		return company;
    	}
    	
    	public String getPosition()
    	{
    		return position;
    	}}
    che ne dite?

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    mi sembra un giro eccessivo, non che sia sbagliato.
    Non avrei definito un oggetto Phone per il telefono, basta una stringa e considera che in genere ne hai al max 2, quindi 2 campi telCasa e cell in genere vanno più che bene.
    A questo punto perché non estendere il discorso a mailAddress, indirizzo di residenza ecc.
    Va bene modellizzare oggetti, ma non bisogna esagerare!!!!
    Ti ripeto però che è una osservazione personale, non è sbagliato, ma gli estremismi sono difetti e in più tendo a mantenere una logica coerente per tutto.

    Aggiungerei un costruttore vuoto e/o con meno campi.
    In genere se una classe ha 20 campi, non sempre li avrai(e sono necessari) tutti e 20.
    Individua quelli di cui non puoi fare a meno, quelli vanno nel costruttore, gli altri usa getter/setter.
    Infine ricorda che se la tua classe modellizza un bean, costruttore vuoto·
    RTFM Read That F*** Manual!!!

  3. #3
    ma io ho tre tipi di numeri e no due.abitazione, ufficio,cellulare

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Dato il problema che hai va fatto in questo modo, ma non è assolutamente il metodo migliore per imparare a modellizzare bene in termini di OOP, perché anche la modellizzazione eccessiva (che porta a ridondanza e a spreco di risorse) è un errore.

    Parlando in termini generali e di OOP quella proposta (e sicuramente richiesta dal docente) la trovo una modellizzazione eccessiva per un campo che puoi rappresentare come una stringa.
    Pensa se hai 1000 persone, ti trovi 3000 oggetti di tipo Phone con dentro un numero (il tel) e stringhe ripetute tante volte (1000 volte casa, 1000 volte ufficio, 1000 volte cell).
    Questa ridondanza è assolutamente superflua, oltre al fatto che può indurti in errore.

    In genere non ti importa nemmeno che tipo di telefono sia, ti importa avere una lista di numeri a cui una persona risponde.
    Quindi io andrei a modellizzare i principali come String e terrei una lista di String per gli altri, anche se quelli sono quasi sempre uno spreco.

    Poi amo la coerenza quando sviluppo: mailAddress perché non applichi lo stesso principio? Stesso dicasi con address. In quelli però il testo non te lo chiede, ma in generale, in cosa differisce mailAddress da telefono?
    RTFM Read That F*** Manual!!!

  5. #5
    ok valia mi hai convinto.effettivamente è come dici te.ma adesso come posso creare una classe Agenda che mi modellizzi un elenco di Persone?

    codice:
    import java.util.*;
    
    public class Person {
    	
    	private String surname;
    	private String name;
    	private String title;
    	private String mail_addr;
    	private String company;
    	private String position;
    	
    	private int homephone;       
    	private int officephone;      
    	private int cellphone;       
    	
    	private Collection<OtherPhoneBook> otherphonebooklist;
    		
    	public Person(String surname,String name,String title,String mail_addr,String company,String position){
    		
    		this.surname=surname;
    		this.name=name;
    		this.title=title;
    		this.mail_addr=mail_addr;
    		this.company=company;
    		this.position=position;
    		
    		otherphonebooklist=new ArrayList<OtherPhoneBook>();
    				
    	}
    	
    	public String getSurname(){
    		
    		return surname;
    	}
    	
    	public String getName(){
    		
    		return name;
    	}
    	
    	public String getTitle(){
    		
    		return title;
    	}
    	
    	public String getMailAddr(){
    		
    		return company;
    	}
    
    	public String getCompany(){
    		
    		return position;
    	}
    	
    	public void setHomePhone(int hp){
    		
    		homephone=hp;
    	}
    	
    	public void setOfficePhone(int op){
    		
    		officephone=op;	
    	}
    	
    	public void setCellPhone(int cp){
    		
    		cellphone=cp;
    	}
    	
    	public int getHomePhone(){
    		
    		return homephone;
    	}
    	
    	public int getOfficePhone(){
    		
    		return officephone;
    	}
    	
    	public int getCellPhone(){
    		
    		return cellphone;
    	}
    
    	public Collection<OtherPhoneBook> getOtherPhoneBook(){
    		
    		return otherphonebooklist;
    	}
    	
    	public String toString(){
    		
    		String temp="";
    		
    		temp+="\nSurname: "+surname;
    		temp+="\nName: "+name;
    		temp+="\nTitle: "+title;
    		temp+="\nMail Address: "+mail_addr;
    		temp+="\nCompany: "+company;
    		temp+="\nPosition: "+position;
    		
    		return temp;
    		
    	}
    }

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    per intenderci:

    1. al fine di svolgere l'esercizio, come avevi fatto rispetta le richieste del prof
    2. al fine di capire come si progetta no, è meglio come ti dicevo una stringa che modellizza il tutto e con 2 banali critiche spero di averti fatto capire la differenza.

    Anche qui, il prof ti chiede una classe Agenda, ma il realtà cosa è Agenda per te? Un elenco di persone...che puoi racchiudere in una lista!!!
    Domanda: è necessario creare un oggetto Agenda con dentro solo una lista di Persone?
    Per come ti chiede il prof si, in realtà no, perché il tuo aggregato è solo la lista di persone che puoi tenere dove ti pare.

    Difficilmente si crea (a meno che non sia chiesto esplicitamente richiesto e motivata la richiesta) un oggetto con dentro solo la lista, difficilmente si crea ridondanza se non necessario e alla fine andresti a creare Agenda con una serie di metodi che fanno la stessa cosa sulla lista.

    Devi distinguere cosa vuole il prof e cosa è in realtà la OOP, purtroppo per te due cose differenti e che ti possono creare confusione (sempre che il tuo intento non sia solo passare l'esame)
    RTFM Read That F*** Manual!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.