·

Engenharia de Software ·

Linguagens de Programação

Envie sua pergunta para a IA e receba a resposta na hora

Fazer Pergunta

Texto de pré-visualização

Fundamentos de P00 Modularidade classes e objetos Prof João Caram Imprescindível para a construção de sistemas de software modernos Flexibilidade Reutilização Manutenção Técnica de projeto design de software Decomposibilidade de software Cada módulo é uma unidade independente que provê uma funcionalidade específica de um sistema Módulos se comunicam Orientação por objetos abstrai o mundo real utilizando objetos que interagem entre si Im sorry that I long ago coined the term objects for this topic because it gets many people to focus on the lesser idea The big idea is messaging Alan Kay POO segundo Alan Kay troca de mensagens proteção e retenção locais possibilitando ocultar o estado ou o processo associação tardia e dinâmica de tudo o que for possível Análise Orientada para Objetos OOAA00 Examina os requisitos de um sistema de uma perspectiva de classes e objetos usando o vocabulário do domínio do problema Projeto Orientado por Objetos OODD00 Projeto no qual o processo da decomposibilidade em objetos é utilizado e modelos físicos e lógicos de objetos são descritos Programação Orientada por Objetos OOPPOO Implementação de programas organizados como coleções de objetos cooperativos ORIENTAÇÃO POR OBJETOS Análise orientada por objetos Projeto orientado por objetos Programação orientada por objetos LINGUAGENS OO Java C Python Eiffel Object Pascal Porém tipos básicos C Ada Perl PHP entre outras incluem o conceito de classes e objetos mas não são consideradas LPs OO em um sentido mais rigoroso CLASSES E OBJETOS Classe Descrição de um Tipo Abstrato de Dados TAD GAL0O13 71 kmh 1908 km 367 litros PUC2O23 47 kmh 25798 km 112 litros Constituída por atributos dadoscaracterísticas e métodos açõescomportamento Um conjunto de entidades semelhantes compõem uma classe de objetos Ex Classe automóvel Projete uma classe Hora para ser utilizada em relógios de sistemas diversos A hora será representada até o nível de segundos Um objeto Hora só pode armazenar estados válidos Um objeto Hora pode receber incrementos de horas minutos ou segundos Um objeto Hora pode ser comparado com outro para verificação de qual valor está mais adiante Características placa velocidade atual km percorridos combustível restante no tanque Hora com hora minuto e segundo validação incremento e comparações Atributos Ações Alterar velocidade atualizar km percorridos verificar combustível no tanque abastecer Métodos Hora com hora minuto e segundo validação incremento e comparações hora byte minuto byte segundo byte ajustarhorabyteminbytesegbyte void validar boolean incrementarquantbyteposicaochar void estahNaFrenteDeoutraHora boolean hora minuto segundo intbyte ajustarbyte hora byte min byte seg void validar boolean incrementarbyte quant char posicao void estahNaFrenteDeHora outra boolean class Hora byte hora byte minuto byte segundo boolean validar if hora0 hora23 minuto0 minuto59 segundo0 segundo59 return true else hora minuto segundo 0 return false class Hora boolean estahNaFrenteDeHora outra boolean resposta false if hora outrahora resposta true else if hora outrahora ifminuto outraminuto resposta true else ifminuto outraminuto ifsegundo outrasegundo resposta true return resposta class Hora boolean estahNaFrenteDeHora outra boolean resposta false if hora outrahora resposta true else if hora outrahora ifminuto outraminuto resposta true else ifminuto outraminuto ifsegundo outrasegundo resposta true return resposta class Hora boolean estahNaFrenteDeHora outra int esta esta hora3600 minuto60 segundo int aquela aquela outrahora3600 outraminuto60 outrasegundo return esta aquela class Aplicacao public static void mainString args Hora hora1 new Hora Hora hora2 new Hora hora1ajustar202445 hora2ajustar202442 boolean naFrente hora1estahNaFrenteDehora2 ifnaFrente SystemoutprintlnHora1 na frente de Hora2 else SystemoutprintlnHora1 igual ou atrás de Hora2 hora2incrementar1 m naFrente hora1estahNaFrenteDehora2 class Aplicacao public static void mainString args Hora hora1 new Hora Hora hora2 new Hora hora1ajustar202445 hora2ajustar202442 boolean naFrente hora1estahNaFrenteDehora2 ifnaFrente SystemoutprintlnHora1 na frente de Hora2 else SystemoutprintlnHora1 igual ou atrás de Hora2 hora2incrementar1 m naFrente hora1estahNaFrenteDehora2 class Aplicacao public static void mainString args Hora hora1 new Hora Hora hora2 new Hora hora1ajustar202445 hora2ajustar202442 boolean naFrente hora1estahNaFrenteDehora2 ifnaFrente SystemoutprintlnHora1 na frente de Hora2 else SystemoutprintlnHora1 igual ou atrás de Hora2 hora2incrementar1 m naFrente hora1estahNaFrenteDehora2 class Aplicacao public static void mainString args Hora hora1 new Hora Hora hora2 new Hora hora1ajustar202445 hora2ajustar202442 boolean naFrente hora1estahNaFrenteDehora2 ifnaFrente SystemoutprintlnHora1 na frente de Hora2 else SystemoutprintlnHora1 igual ou atrás de Hora2 hora2incrementar1 m naFrente hora1estahNaFrenteDehora2 class Aplicacao public static void mainString args Hora hora1 new Hora Hora hora2 new Hora hora1ajustar202445 hora2ajustar202442 boolean naFrente hora1estahNaFrenteDehora2 ifnaFrente SystemoutprintlnHora1 na frente de Hora2 else SystemoutprintlnHora1 igual ou atrás de Hora2 hora2incrementar1 m naFrente hora1estahNaFrenteDehora2 class Aplicacao public static void mainString args Hora hora1 new Hora Hora hora2 new Hora hora1ajustar202445 hora2ajustar202442 boolean naFrente hora1estahNaFrenteDehora2 ifnaFrente SystemoutprintlnHora1 na frente de Hora2 else SystemoutprintlnHora1 igual ou atrás de Hora2 hora2incrementar1 m naFrente hora1estahNaFrenteDehora2 class Aplicacao public static void mainString args Hora hora1 new Hora Hora hora2 new Hora hora1ajustar202445 hora2ajustar202442 ifhora1estahNaFrenteDehora2 SystemoutprintlnHora1 na frente de Hora2 else SystemoutprintlnHora1 igual ou atrás de Hora2 hora2incrementar1 m Modularidade e POO Modularidade mecanismo para aumentar a flexibilidade e compreensibilidade de um sistema ao mesmo tempo em que permite a redução do seu tempo de desenvolvimento Parnas David L On the Criteria To Be Used in Decomposing Systems into Modules Communications of the ACM Vol 15 No 12 pp 1053 1058 1972 Tradução livre do autor Modularidade mecanismo para aumentar a flexibilidade e compreensibilidade de um sistema ao mesmo tempo em que permite a redução do seu tempo de desenvolvimento Parnas David L On the Criteria To Be Used in Decomposing Systems into Modules Communications of the ACM Vol 15 No 12 pp 1053 1058 1972 Tradução livre do autor Quatro pilares em softwares modulares Coesão Acoplamento Abstração Encapsulamento Quatro pilares em softwares modulares Coesão Acoplamento Abstração Encapsulamento POO segundo Alan Kay troca de mensagens proteção e retenção locais possibilitando ocultar o estado ou o processo associação tardia e dinâmica de tudo o que for possível Modularidade Coesão MODULARIDADE COESÃO Coesão Qualidade de uma coisa em que todas as partes estão ligadas umas às outras¹ Objetivo de um módulo em PO0 alta coesão interna dependência intramodular utilizar informações internas de forma coerente para resolver um problema específico Alta coesão Induz a independência funcional Facilita a manutenção Reduz efeitos colaterais e propagação de erros Modularidade Acoplamento INDEPENDÊNCIA FUNCIONAL Módulo grupo de comandos com uma função bem definida e o mais independente possível em relação ao resto do algoritmo A dependência pode ser medida pela quantidade de conexões entre os elementos de software Medida da interconexão entre elementos de software Medida da interconexão entre elementos de software Espaguete alto acoplamento Situação ideal baixo acoplamento Baixo acoplamento indicadores Tamanho Quantidade parâmetros e métodos públicos POO segundo Alan Kay troca de mensagens proteção e retenção locais possibilitando ocultar o estado ou o processo associação tardia e dinâmica de tudo o que for possível Modularidade Abstração Uma classe Hora Quem define como é modelada a hora Int ou byte Centésimos milésimos Só incrementa não decrementa Mostra a diferença em segundos entre duas horas Capacidade de enxergar uma operação complexa de uma forma simplificada Visualização ou representação de uma entidade que inclui somente os atributos de importância em um contexto particular Sebesta 2000 Um módulo deve prover uma boa abstração da função pela qual é responsável Pessoa cadastro de cidadãos identidade Pessoa cadastro acadêmico Pessoa cadastro na Epic Store Além disso Conceito da caixapreta Entrada e saída bem conhecidas Detalhes ocultos Ideia principal não é necessário saber detalhes do funcionamento de um objeto para utilizálo Ex como funciona o compartilhamento de tela em um aplicativo de reuniões online Caixapreta e abstração Como o Spotify gerencia uma playlist Como a Netflix gerencia a lista de filmes para ver Como o Canvas gerencia a lista de disciplinas do aluno POO segundo Alan Kay troca de mensagens proteção e retenção locais possibilitando ocultar o estado ou o processo associação tardia e dinâmica de tudo o que for possível Modularidade Encapsulamento class Hora public byte hora public byte minuto public byte segundo Hora hora1 new Hora hora1hora 22 hora1minuto 64 hora1segundo 93 hora1incrementar15 s Encapsular incluir ou proteger em uma cápsula ou como em uma cápsula Em POO Ocultar e proteger o estado Ocultar o processo 1Dicionário Michaelis Online Disponível em httpsmichaelisuolcombrbuscaidkQQD acessado em Fev2022 class Hora public byte hora public byte minuto public byte segundo Hora hora1 new Hora hora1hora 22 hora1minuto 64 hora1segundo 93 hora1incrementar15 s Separa aspectos visíveis de um objeto ou classe de seus detalhes de implementação Separa aspectos visíveis de um objeto ou classe de seus detalhes de implementação Separa aspectos visíveis de um objeto ou classe de seus detalhes de implementação Detalhes ocultos interface exposta Interface aquilo que o usuário do objeto vê Interface maneira como o usuário utiliza o objeto Permite alteração na implementação sem impactos em outros módulos do sistema Favorece a abstração Protege dadosatributos do acesso direto a partir de um código externo Encapsulamento Encapsulamento e projeto OO Níveis de acesso e modificadores Público acesso irrestrito Classe atributos ou métodos visíveis em qualquer parte Privado acesso totalmente restrito Classe atributos ou métodos visíveis somente para quem os declarou Protegido Classe atributos ou métodos visíveis para quem o declarou e para módulos derivados deste Classe atributos ou métodos visíveis para quem o declarou e para módulos derivados deste Aplicação na especialização com herança veremos mais adiante NÍVEIS DE ACESSO JAVA Default package Não é necessário declarar no Java Classe atributos e métodos visíveis para quem todos que fazem parte do mesmo pacote Java Não há visibilidade para subclasses de outros pacotes class Hora private byte hora private byte minuto private byte segundo NÍVEIS DE ACESSO JAVA Modificador Classe Pacote Subclasse Mundo public sim sim sim protected sim sim não default sim sim não private sim não não class Hora private byte hora private byte minuto private byte segundo public void ajustar public void incrementar class Hora private byte hora private byte minuto private byte segundo Hora hora1 new Hora hora1ajustar226493 hora1incrementar15 s class Hora private byte hora private byte minuto private byte segundo Hora hora1 new Hora hora1ajustar226493 hora1incrementar15 s class Hora private byte hora private byte minuto private byte segundo Hora hora1 new Hora hora1ajustar226493 hora1incrementar15 s class Hora private byte hora private byte minuto private byte segundo Hora hora1 new Hora hora1ajustar226493 hora1incrementar15 s ENCAPSULAMENTO Internamente a classe pode se referir a seus componentes utilizando a palavrachave this Clareza Desambiguação class Hora public boolean validar if thishora0 thishora23 thisminuto0 thisminuto59 thissegundo0 thissegundo59 return true else thishora thisminuto thissegundo 0 return false Os atributos de uma classe só devem ser acessados e modificados por meio de seus métodos Um método de uma classe só deve existir se ele tiver relação com os atributos da classe Os atributos de uma classe só devem ser acessados e modificados por meio de seus métodos class Hora public boolean validar if thishora0 thishora23 thisminuto0 thisminuto59 thissegundo0 thissegundo59 return true else thishora thisminuto thissegundo 0 return false De maneira geral atributos são privados e métodos são públicos class Hora private boolean horaValida private boolean minutoValido private boolean segundoValido public boolean validar if horaValida minutoValido segundoValido return true else thishora thisminuto thissegundo 0 return false Métodos de acesso Métodos get dão acesso ao valor de um atributo int getHora Métodos get dão acesso ao valor de um atributo void setMinutosbyte minutos Debate É uma boa ideia termos indiscriminadamente métodos getters e setters na classe Why getter and setter methods are evil httpswwwinfoworldcomarticle2073723whygetterandsettermethodsareevilhtml GettersSetters Evil Period httpswwwyegor256com20140916gettersandsettersareevilhtml OBRIGADO Dúvidas