Static Modeling In COMET Corso di Ingegneria del Software II Sonia Pini Static modeling: Cos’è Considera gli aspetti strutturali statici del problema. Definisce le classi di oggetti nel sistema, con attributi, operazioni e relazioni tra classi Static Modeling in COMET E’ la prima attività dell’Analysis Modeling Lo scopo dell’Analysis Modeling è quello di capire il problema, e quindi identificare gli oggetti del dominio del problema e le informazioni passate tra tali oggetti. Definisce il modello statico per le specifiche del problema. Utilizza la notazione UML per i Class Diagrams. Indice argomenti. Preliminari tecnici (UML) per lo Static Modeling. Metodo COMET per lo Static Modeling. indice Preliminari tecnici. Nel dettaglio analizzeremo: Relazioni tra classi: Associazioni Composizioni e Aggregazioni Generalizzazioni/Specializzazioni Vincoli indice Preliminari tecnici: Associazioni Per le associazioni daremo: Definizione di Associazione con alcuni esempi. Definizione di Link Attributes. Definizione di Association Classes. indice Associazioni. Una associazione è una relazione tra 2 o più classi, che denota una qualche relazione strutturale tra le classi. Esempio. Employee works in Department Esistono convenzioni per la descrizione delle associazioni nei class diagram. indice Associazioni: esempio <<entity>> Company <<entity>> Company name:String address:String businessSector:String name:String address:String businessSector:String 1 ..*1 Has 1 <<entity>> President name:String SSN:String address:String phoneNumber:Integer Molteplicita` dell’associazione. Manages 1..* <<entity>> President name:String SSN:String address:String phoneNumber:Integer indice Associazioni: esempio. <<entity>> Car modelName:String manufacture:String modelYear:Date 1 <<entity>> Course courseId: String courseName: String Section#: Integer Semester: String * Has 2,4 <<entity>> Door heigh: Real width: Real depth: Real windowArea: Real Material: String Has Attends * <<entity>> Student studentName: String studentSSN: String studentAddress: String studentType: String indice Associazioni Ternarie. Ternaria: e` un’associazione a 3 vie tra classi. <<entity>> Buyer Name:String Address:String phoneNumber:String movingDateTarger:Date homePriceTaget:Integer Negotiates Price <<entity>> Agent name:String address:String Company:String workPhoneNumber:String homePhoneNumber:String <<entity>> Seller Name:String Address:String phoneNumber:String SelleringPrice:Integer Indice Associazioni Unarie. Unaria: è un’associazione tra un oggetto di una classe e un altro oggetto della stessa classe. Esempio. Person is-married-to Person Employee is-boss-of Employee indice Associazioni: Link Un Link è una connessione tra istanze oggetto. Rappresenta una istanza di una associazione tra classi. Esempio. Jane works in Manufactuting indice Associazioni: Link Attributes E` possibile per un Link avere degli attributi. Tali attributi appartengono alla associazione. indice Associazioni: Link Attributes <<entity>> Employee employeeName: String employeeSSN: String employeeAddress: String Level: String <<entity>> Project * * projectId: String projectName: String startDate: Date endDate: Date Customer: String hoursWorked: Real indice Associazioni: Association Class. Sono un’alternativa all’uso dei Link Attributes. Rappresentano una classe che modella un’associazione tra 2 o più classi. I suoi attributi sono attributi dell’associazione. indice Associazioni: Association Class <<entity>> Employee employeeName: String employeeSSN: String employeeAddress: String Level: String <<entity>> Project * * projectId: String projectName: String startDate: Date endDate: Date Customer: String <<entity>> Hours hoursWorked: Real indice Composizioni e Aggregazioni. Entrambe si riferiscono a una classe costruita su altre classi. Sono forme speciali di relazioni in cui le classi sono saldamente legate dalla relazione Parte/Intero. La relazione parte/intero, in entrambi I casi, è una relazione IS PART OF. indice Composizioni. Le parti (oggetti) sono creati, vivono e muoiono con l’intero. Le parti di una composizione possono includere classi e associazioni. Una classe composta spesso implica una relazione fisica tra l’intero e le parti. indice Composizioni: esempio. Elevator Elevator#: Integer currentFloor#: Integer Direction: DirectionType 1..* ElevatorButton 1 1..* 1 ElevatoLamp Motor destinationFloor#: Integer destinationFloor#: Integer Door indice Aggregazioni. L’aggregazione gerarchica è una forma più debole di relazione parte/intero. Sono usate per modellare classi concettuali piuttosto che classi fisiche. Le istanze delle parti possono venire aggiunte e rimosse dall’intero. Una parte può appartenere a più di una aggregazione. indice Aggregazioni: esempio <<aggregate>> College Gli attributi sono Propagati dall’intereo alle parti. collegeName: String Dean: String 1 <<entity>> AdminOffice Location: String Phone#: String Administrator: String 1..* <<entity>> |Departement deptName: String deptLocation: String deptPhone#: String chairPerson: String Secretary: String 1..* <<entity>> ResearchCenter name: String location: String phone#: String Head: String foundingDate: Date renewalDate: Date indice Generalizzazioni/Specializzazioni Sono relazioni tassonomiche tra un elemento più generale (superclass) e uno più specifico (subclass). L’elemento più specifico è completamente compatibile con l’altro elemento e aggiunge informazioni addizionali. C’è una relazione IS A tra la subclass e la superclass. La subclass eredita proprietà dalla superclass. indice Generalizzazioni/Specializzazioni <<entity>> Account accountNumber: Integer Balance: Real <<entity>> CheckingAccount <<entity>> SavingAccount tastDepositAmount: Real Interest: Real Generalizzazioni/Specializzazioni indice Discriminator. Un Discriminator è un attributo che indica quale proprietà dell’oggetto è stata astratta dalla relazione di generalizzazione. indice Generalizzazioni/Specializzazioni <<entity>> Account accountNumber: Integer Balance: Real AccountType <<entity>> CheckingAccount <<entity>> SavingAccount tastDepositAmount: Real Interest: Real indice Vincoli. Specificano condizioni che devono essere vere. Possono essere espressi attraverso il linguaggio naturale oppure attraverso il linguaggio fornito da UML, cioè OCL(Object Constraint Language) Alcuni tipi di constraint: Sugli attributi Sulle associazioni indice Vincoli e Commenti in UML. indice Vincoli: esempio. <<entity>> Account accountNumber: Integer Balance: Real { balance>= 0 } indice Vincoli: esempio. <<entity>> Account accountNumber: Integer Balance: Real 1 Modified by {ordered by time} * <<entity>> ATMTransaction transactionId; Integer cardId: Integer PIN: String Date: Date Time: Time Status: Integer indice Indice argomenti. Preliminari tecnici (UML) per lo Static Modeling. Metodo COMET per lo Static Modeling. indice Metodo COMET. Tratteremo con particolare considerazione: Descrizione dell’approccio COMET. Static Modeling del Dominio del Problema. Static Modeling del System Context. 2 esempi di sviluppo. Static Modeling delle Entity Classes. indice Static Modeling e UML C’è poco accordo su come applicare lo Static Modeling, cioè su quale metodo usare per sviluppare Class Diagrams. Alcune proposte di sviluppo sono di usare: Static modeling per modellare le classi. Sstatic modeling solo per modellare entity classes. Diversi livelli di static modeling. Approccio COMET all’uso dello Static Modeling. indice COMET usa un approccio con diversi livelli di Static Modeling: Un conceptual Static Model semplice nella fase di analisi. Uno Static Modeling piu` dettagliato nella fase di design. Static Modeling del dominio del problema. indice Occorre modellare dapprima: Physical Classes. Rappresentano classi con caratteristiche fisiche, che avranno bisogno di una rappresentazione concettuale nel sistema software. Entity Classes. Rappresentano classi con dati persistenti, ad esempio classi con dati memorizzati in un data-base. Static Modeling del dominio del indice problema: esempio. 1 Bank 1..* ATM Mantains ATM 1 1 1 Cardreader 1 Reads 1 ATMCard 1 Operator 1 CashDispenser 1 Dispenses 1 ATMCash 1 ReceiptPrinterBank 1 1 Receipt Prints Terminal Static Modeling del System Context. System Context E` utilizzato per comprendere l’interfaccia tra il sistema e l’ambiente esterno. Nella structured Analysis il System Context è mostrato da un System Context Diagram. Può essere rappresentato con: Static Model. Collaboration Model. indice indice System Context Diagram. Il system context class diagram può essere determinato attraverso: Lo static modeling delle classi esterne connesse al sistema. L’uso di use cases. Sviluppo di Context Class Diagram dalle calssi esterne. 1 <<external I/O 1..* device>> CardReader Inputs to 1 Outputs 1 <<external output to device>> ReceiptPrinter ATM Customer indice 1 1..* Outputs to 1 1 1 <<system>> Banking System 1 Operator Interacts with 1 1..* <<external user>> Operator <<external user>> 1..* Interacts 1 ATMCustomer with 1 <<external output 1..* device>> CashDispenser Outputs to Static modeling del dominio del problema per il sistama bancario Sviluppo di Context Class Diagram dagli Attori. Occorre ricavare le classi esterne dagli attori. Abbiamo due attori nel caso del Banking System Context Class Diagram, entrambi utenti umani. indice Static Modeling delle Entity Classes. I dati contenuti nelle entity classes sono memorizzati in modo permanente e acceduti da use cases. Sono definite durante lo static modeling del dominio del probelma. indice Static modeling delle Entity Classes. 1 <<entity>> Bank 1 <<entity>> Manteins 1 ATMInfo Has 1 1..* 0..1 <<entity>> DebitCard 1..* Provides acces to * * <<entity>> Customer 1,2 Owns Identifies 1 1..* Manages indice * Modifies <<entity>> ATMTransaction Owns 1.* <<entity>> Account 1..* <<entity>> CardAccount <<entity>> Checking Account <<entitty>> Saving Account <<entity>> Withdrawal Transaction <<entity>> Query Transaction <<entity>> Transfer Transaction <<entity>> PINValidation Transaction