View
219
Download
0
Category
Preview:
Citation preview
DiagramadeClasses
LeonardoGrestaPaulinoMurtaleomurta@ic.uff.br
Oqueé?• Diagramamaisu>lizadodaUML• Representaos>pos(classes)deobjetosdeumsistema– Propriedadesdesses>pos– Funcionalidadesprovidasporesses>pos– Relacionamentosentreesses>pos
• Podesermapeadodiretamenteparaumalinguagemorientadaaobjetos– Ajudanoprocessotransitóriodosrequisitosparaocódigo– Poderepresentarvisualmenteocódigodosistema
LeonardoMurta DiagramadeClasses 2
A1kmdedistância...• Caixasrepresentandoasclasses• Linhasrepresentandoosrelacionamentos
LeonardoMurta DiagramadeClasses 3
A1metrodedistância...• Asclassessãorepresentadasporcaixascontendo– Nome(obrigatório)– Listadeatributos– Listadeoperações
LeonardoMurta DiagramadeClasses 4
Pedido
-data: Date-numero: int-valor: Money
+finaliza()
Pedido Atributos
Nome
Operações
Propriedades• Classessãodescritasviasuaspropriedades– Primi>vas:representadascomoatributos– Compostas:representadascomoassociaçõesparaoutrasclasses
• Quandotransformadasparacódigo,aspropriedadessetornamsemprecamposdaclasse
LeonardoMurta DiagramadeClasses 5
Pedido
-data: Date-numero: int-valor: Money
Cliente
-nome: String-endereco: String
Atributos
Associações
A1cen[metrodedistância...dosatributos
• Atributossãodescritosvia– Visibilidade– Nome– Tipo– Mul>plicidade– Valorpadrão
LeonardoMurta DiagramadeClasses 6
-endereco:String[1]=“SemEndereço”
Atributos(visibilidade)
• Privado(-)– Somenteaprópriaclassepodemanipularoatributo– Indicadonamaioriadoscasos
• Pacote(~)– Qualquerclassedomesmopacotepodemanipularoatributo
• Protegido(#)– Qualquersubclassepodemanipularoatributo
• Publico(+)– Qualquerclassedosistemapodemanipularoatributo
LeonardoMurta DiagramadeClasses 7
-endereco:String
Atributos(nomee>po)
• Onomedoatributocorrespondeaonomequeseráu>lizadonocódigofonte– Éaceitávelu>lizarnomescomespaçoeacentosnafasedeanálise
• O>podoatributocorrespondeao>poqueseráu>lizadonocódigofonte– Tiposprimi>vosdalinguagem– Classesdeapoiodalinguagem(String,Date,Money,etc.)
LeonardoMurta DiagramadeClasses 8
-endereco:String
Atributos(mul>plicidade)
• Representaonúmerodeelementosdeumapropriedade• EstruturaX..Yonde
– Opcional:X=0– Mandatório:X=1– Somenteumvalor:Y=1– Mul>valorado:Y>1
• Valoresclássicos– 0..1– 1(equivalentea1..1àdefault)– *(equivalentea0..*)– 1..*
LeonardoMurta DiagramadeClasses 9
-endereco:String[0..3]
A1cen[metrodedistância...dasassociações
• Associações– Guardaasmesmasinformaçõesdosatributos– U>lizaumanotaçãográfica– Deveseru>lizadoparapropriedadesquesãorelevantesaodiagrama
– Determinaopapeldasclassesnaassociação– Determinaosen>dodenavegação
LeonardoMurta DiagramadeClasses 10
Pedido
-data: Date-numero: int-valor: Money
+finaliza()
Cliente
-nome: String-endereco: String
-pedidosFechados
0..*
Empregado
1..*
0..1
gerente
subordinado
0..1
1..*
A1cen[metrodedistância...dasoperações
• Operaçõessãodescritasvia– Visibilidade– Nome– Listadeparâmetros– Tipoderetorno
LeonardoMurta DiagramadeClasses 11
+finaliza(data:Date):Money
Operações(visibilidade)
• Valemasmesmasregrasdevisibilidadedeatributos• Privado(-)– Funcionalidadesdeapoioàprópriaclasse
• Pacote(~)– Funcionalidadesdeapoioaoutrasclassesdopacote(ex.construçãodeumcomponente)
• Protegido(#)– Funcionalidadesqueprecisamserestendidasporoutrasclasses(ex.construçãodeumframework)
• Publico(+)– Funcionalidadesvisíveisportodasasclassesdosistema
LeonardoMurta DiagramadeClasses 12
+finaliza(data:Date):Money
Operações(nomee>poderetorno)
• Valemasmesmasregrasjávistasparaatributos...– Normalmenteonomedeumaoperaçãoéformadoporumverbo(opcionalmenteseguidodesubstan>vo)
– Aausênciadeum>poderetornoindicaqueaoperaçãonãoretornanada(i.e.,void)
LeonardoMurta DiagramadeClasses 13
+finaliza(data:Date):Money
Operações(listadeparâmetros)
• Alistadeparâmetrospodesercompostaporzerooumaisparâmetrosseparadosporvírgula– Parâmetro:[direção]nome:>po[=valorpadrão]– Direção(opcional)
• in(default)• out• inout
– Nome– Tipo
• Primi>vo• Classe
– Valorpadrão(opcional)
LeonardoMurta DiagramadeClasses 14
+finaliza(data:Date):Money
Emanálise...• Nãoseatenhaaosdetalhes– Visibilidade– Navegabilidade– Tipo
• Visibilidadepúblicaempropriedades– Assumecampoprivadoemétodosdeacesso(geteset)
• Operações– Somenteasresponsabilidadesobviasdasclasses
LeonardoMurta DiagramadeClasses 15
Exercício• TraduzaoseguintediagramaemcódigoJava• CriemétodosdeacessoparaaspropriedadesdaclasseCliente
LeonardoMurta DiagramadeClasses 16
Pedido
-data: Date-numero: int-valor: Money
+finaliza()
Cliente
-nome: String-endereco: String
-pedidosFechados
0..*
Palavras-chave,propriedadeserestrições
• Apóiamalinguagemgráficacominformaçõestextuais• Permitemdarmaissemân>caaoselementosdomodelo• Notaçãodepalavra-chave– Textual:<<palavra>>(ex.:<<interface>>)– Icônica:imagemrepresentandoapalavra-chave
• Notaçãodepropriedadeserestrições– {propriedade}(ex.:{readonly})– {nome=valor}(ex.:{versão=1.0}– {restrição}(ex.:{Mãedeveserdosexofeminino})
LeonardoMurta DiagramadeClasses 17
Pessoa<<entity>>
+nome: String {readonly, versao = 1.0} +filho
+mae
Propriedadesdeatributoseassociações
• Algunsexemplos...• {readonly}– Somenteofereceoperaçõesdeleitura
• {ordered},{unordered}– Indicaseoatributoouassociaçãomul>valoradomantémasequênciadositensinseridos
• {unique},{nonunique}– Indicaseoatributoouassociaçãomul>valoradopermiterepe>ção
LeonardoMurta DiagramadeClasses 18
-endereco:String=“SemEndereço”{readonly}
Propriedadesdeoperações
• {query}– Nãomodificaoestadodosistemaapósaexecução
• {sequen>al}– Ainstânciafoiprojetadaparatratarumathreadporvez,masnãoéresponsabilidadedaclasseassegurarqueissoocorra
• {guarded}– Ainstânciafoiprojetadaparatratarumathreadporvez,eéresponsabilidadedaclasseassegurarqueissoocorra(ex.:métodossynchronizedemJava)
• {concurrent}– Ainstânciaécapazdetratarmúl>plasthreadsconcorrentemente
LeonardoMurta DiagramadeClasses 19
+finaliza(data:Date):Money{sequen>al}
Outrosrelacionamentosentreclasses
• Alémdasassociações,algunsoutros>posderelacionamentossãoimportantes– Generalização– Composição– Agregação– Dependência– Classesdeassociação
LeonardoMurta DiagramadeClasses 20
Generalização• Visaestabelecerrelaçõesentre>pos• Leitura:“éum”• SeGerente“éum”Funcionário– Todasasoperaçõesepropriedades(nãoprivadas)deFuncionáriovãoestardisponíveisemGerente
– TodainstânciadeGerentepodeseru>lizadaondeseesperainstânciasdeFuncionário
– Geraoefeitodeherançaepolimorfismoquandomapeadoparacódigo
LeonardoMurta DiagramadeClasses 21
Funcionário
Gerente
Agregação• Éumaassociaçãocomasemân>cade“contém”• Servecomoumarelaçãotodo-partefraca• Otodoexistesemaspartes• Aspartesexistemsemotodo• Apartepodeseragregadaporváriostodos
LeonardoMurta DiagramadeClasses 22
Carro Pessoa
-passageiros
0..5
Composição• Éumaassociaçãocomasemân>cade“écompostode”
• Servecomoumarelaçãotodo-parteforte• Otodonãoexistesemaspartes– Aspartespertencemasomenteumtodo– Aremoçãodotodoimplicanaremoçãodaspartes
LeonardoMurta DiagramadeClasses 23
Carro Peças
Dependência• Deixaexplícitoquemudançasemumaclassepodemgerarconsequênciasemoutraclasse
• Exemplos:– Umaclassechamamétodosdeoutra– Umaclassetemoperaçõesqueretornamoutraclasse– Umaclassetemoperaçõesqueesperamcomoparâmetrooutraclasse
• Outrosrelacionamento(ex.:associaçãocomnavegação)implicitamentedeterminamdependência
• Nãotentemostrartodasasdependênciasnoseudiagrama!
LeonardoMurta DiagramadeClasses 24
A B
Leitura:classeAdependedaclasseB
Classesdeassociação• Permitemaadiçãodeinformaçõesemumaassociação
• Devemsertransformadasemclassescomunsposteriormenteparaviabilizarimplementação
LeonardoMurta DiagramadeClasses 25
Cliente
-nome: String-endereco: String
Loja
0..*0..*
Qualovalortotalgastoemcadaloja?
Cliente
-nome: String-endereco: String
Loja
0..*0..*
Cadastro
+valorTotalGasto
Cliente
-nome: String-endereco: String
LojaCadastro
+valorTotalGasto0..*1 10..*
A1milímetrodedistância...propriedadeseoperaçõesestá>cas
• Propriedadesquenãosãoinstanciadasnosobjetos• Operaçõesqueatuamsomentesobrepropriedadesestá>cas
• Ambossãoacessadosdiretamentenaclasse– Ex.:Pedido.getProximoNumero()
• Sãosublinhadasnodiagrama
LeonardoMurta DiagramadeClasses 26
Pedido
-data: Date-numero: int-valor: Money
+finaliza()+getProximoNumero(): int
A1milímetrodedistância...propriedadesderivadas
• Sãopropriedadesquenaverdadenãoexistemcomoatributosouassociações
• Podemserinferidasporoutraspropriedadesdaclasse
• Éinteressanteexplicitaratravésdenotaourestriçãoafórmuladederivação
• Sãomarcadascomosímbolo“/”
LeonardoMurta DiagramadeClasses 27
Período
+inicio: Date+fim: Date+/duracao: int
A1milímetrodedistância...Classeseoperaçõesabstratas
• Classesquenãopodemterinstâncias– Usualmentetêmoperaçõesabstratas,ouseja,semimplementação
• Suassubclassesusualmentesãoconcretas– Implementammétodoscomcomportamentosespecíficosparaasoperaçõesabstratas
• U>lizamnomeemitálico
LeonardoMurta DiagramadeClasses 28
Animal
+fala()
A1milímetrodedistância...Interfaces
• Umaclassesemnenhumaimplementação– Todasoperaçõessãoabstratas
• Fazusodapalavra-chave<<interface>>– Podeserrepresentadotambémcomoumícone
• Orelacionamentoderealizaçãoindicasasclassesqueimplementamainterface– Equivalenteageneralização
LeonardoMurta DiagramadeClasses 29
List<<interface>>
+get(position:int)()
ArrayList
List
+get(position:int)()
ArrayList
List<<interface>>
+get(position:int)()
ArrayList
A10kmdedistância...pacotes
• Emalgumassituaçõessedesejaterumavisãogeraldaspartesdosistema
• Paraisso,odiagramadepacoteséaferramentaindicada
• Pacotesagregamclasseseoutrospacotes– Dependênciaspodemserinferidasindiretamente
• Exemplo– ClasseC1pertenceaopacoteP1– ClasseC2pertenceaopacoteP2– ClasseC1dependedaclasseC2– Logo,pacoteP1dependedopacoteP2
LeonardoMurta DiagramadeClasses 30
Pacotes
LeonardoMurta DiagramadeClasses 31
builtin::DenyImmutableAETracePolicy
+execute(trace: Trace, action: byte)+getDescription(): String+getRationale(): String
policies::PreTracePolicy<<interface>>
+execute(trace: Trace, action: byte)
policies::ArchTracePolicy<<interface>>
+getDescription(): String+getRationale(): String
builtin::DenyRemovalFromBranch
+execute(trace: Trace, action: byte)+getDescription(): String+getRationale(): String
builtin::RemoveAncestryTracesPolicy
+execute(trace: Trace, action: byte)+getDescription(): String+getRationale(): String
policies::PostTracePolicy<<interface>>
+execute(trace: Trace, action: byte)
policies
builtin
<<import>>
Dicas• Iniciecomumdiagramasimples• Oquenormalmentetememtododiagrama– Classes– Atributos– Operações– Associações
• Useosdemaisrecursosdalinguagemsomentequandoforrealmentenecessário
LeonardoMurta DiagramadeClasses 32
Dicas(possíveiscandidatos)
• Classes– En>dadesexternasqueproduzemouconsomeminformações(ex.:sistemadevalidaçãodocartãodecrédito)
– Coisasquesãopartedoproblemaequesãoinformaçõescompostas(ex.:Produto)
– Eventosqueocorremduranteaoperaçãodosistema(ex.:Pedido)
– Papeisqueinteragemcomosistema(ex.:Cliente)– Unidadesorganizacionaisrelevantes(ex.:Rededelojas)– Lugaresquefornecemocontextodoproblemaoudosistema(ex.:Loja)
– Estruturasdefinidasnoproblema(ex.:Estoque)
LeonardoMurta DiagramadeClasses 33
Dicas(possíveiscandidatos)
• Atributos– Informaçãoprimi>vaqueprecisasermemorizada(ex.:Preço)
• Associações– AclasseAprecisaserelacionarcomaclasseBparaatenderaoperaçõesespecíficas(ex.:Cliente–Pedido)
• Operações– Funcionalidadesquedevemserprovidasporumaclasseparaviabilizarousodosistema(ex.:calculaTotalemPedido)
LeonardoMurta DiagramadeClasses 34
Exercício• Elaboreumdiagramadeclassesparaumsistemadepontodevendas
– R01.OgerentedevepoderfazerlogincomumIDesenhaparainiciarefinalizarosistema;– R02.Ocaixa(operador)devepoderfazerlogincomumIDesenhaparapoderu>lizarosistema;– R03.Osistemadeveregistraravendaemandamento–ositenscomprados;– R04.Osistemadeveexibiradescriçãoepreçoedoitemregistrado;– R05.Osistemadevecalcularototaldavendacorrente;– R06.Osistemadevetratarpagamentocomdinheiro–capturaraquan>daderecebidae
calcularotroco;– R07.Osistemadevetratarpagamentocomcartãodecrédito–capturarainformaçãodocartão
atravésdeumleitordecartõesouentradamanualeautorizaropagamentou>lizandooserviçodeautorizaçãodecrédito(externo)viaconexãopormodem;
– R08.Osistemadevetratarpagamentocomcheque–capturaronúmerodacarteiradeiden>dadeporentradamanualeautorizaropagamentou>lizandooserviçodeautorizaçãodecheque(externo)viaconexãopormodem;
– R09.Osistemadevereduzirasquan>dadesemestoquequandoavendaéconfirmada;– R10.Osistemadeveregistrarasvendascompletadas;– R11.Osistemadevecontrolardiversaslojas,comcatálogodeprodutosepreçosunificado,
porémestoquesseparados;
LeonardoMurta DiagramadeClasses 35
Bibliografia• Fowler,Mar>n.2003.UMLDis2lled:ABriefGuidetotheStandardObjectModelingLanguage.3rded.Addison-WesleyProfessional.
• Pressman,Roger.2004.SoBwareEngineering:APrac22oner'sApproach.6thed.McGraw-Hill.
LeonardoMurta DiagramadeClasses 36
DiagramadeClasses
LeonardoGrestaPaulinoMurtaleomurta@ic.uff.br
Recommended