Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Prévia do material em texto

<p>Análise Orientada a Objetos</p><p>https://www.machertecnologia.com.br/transferencia-internacional-de-dados/</p><p>Tutor:</p><p>1</p><p>Navegaremos por conceitos e práticas que envolvem a</p><p>Análise Orientada a Objetos.</p><p>https://br.lexlatin.com/opiniao/transferencia-de-dados-pessoais-entre-companhias-multinacionais</p><p>VOCÊ JÁ ACESSOU SEU LIVRO DE ESTUDOS?</p><p>Bem-vindo à</p><p>disciplina de</p><p>Análise Orientada a Objetos.</p><p>https://images.app.goo.gl/58eaAzpFiV5aWtNL9</p><p>Apresentação</p><p>No Tema 1, abordaremos uma introdução aos conceitos de Orientação a Objetos (OO), apresentando os fundamentos da OO, explicando conceitos-chave como classes, objetos, atributos, métodos, abstração, encapsulamento, herança e polimorfismo.</p><p>No Tema 2, vamos explorar os benefícios da OO no desenvolvimento de software, abordando vantagens como maior organização e estruturação do código, facilidade de manutenção e extensão de funcionalidades, e melhor representação das entidades e processos do mundo real.</p><p>No Tema 3, vamos desenvolver os princípios de design (coesão e acoplamento). Esses princípios ajudam a criar sistemas mais robustos, escaláveis e fáceis de entender e modificar.</p><p>UNIDADE 1 – Tópico 1</p><p>VISÃO GERAL DA ORIENTAÇÃO A OBJETOS</p><p>Metas de Aprendizagem</p><p>Conceituar a orientação a objetos.</p><p>Conhecer a história do surgimento do paradigma da orientação a objetos.</p><p>Entender os motivos para o uso da orientação a objetos.</p><p>Compreender a importância da orientação a objetos.</p><p>Entender os conceitos relacionados à coesão, acoplamento e gap semântico.</p><p>Definir e fundamentar a orientação a objetos.</p><p>Introduzir os conceitos iniciais de abstração, encapsulamento, herança e associação</p><p>Introdução</p><p>OO Facilita a decomposição de problemas complexos em unidades simples e gerenciáveis, melhorando a interação e modularidade no desenvolvimento de sistemas. Entre as características temos:</p><p>Baseada na abstração de entidades do mundo real em objetos computacionais.</p><p>Objetos possuem atributos (características) e métodos (comportamentos).</p><p>Promove a modularidade, flexibilidade e uma representação mais precisa dos sistemas complexos.</p><p>HISTÓRIA DA ORIENTAÇÃO A OBJETOS</p><p>A história da Orientada a Objetos remonta às suas raízes nos conceitos fundamentais de objetos, e evoluiu através do desenvolvimento da linguagem</p><p>Simula, culminando no surgimento da linguagem Smalltalk.</p><p>Raízes do conceito de objetos</p><p>Platão e a Teoria das Formas (375 a.C.):</p><p>Introduziu a ideia de ‘formas’ ou ‘ideias’ como padrões perfeitos e imutáveis.</p><p>Objetos do mundo físico são manifestações imperfeitas dessas formas ideais.</p><p>Propôs a existência de uma realidade transcendental e eterna por trás de cada objeto.</p><p>Aristóteles e o Conceito de Herança (330 a.C.):</p><p>Observou que muitos animais compartilham características semelhantes.</p><p>Sugeriu a criação de entidades que contenham essas características comuns, precursor do conceito de superclasse.</p><p>Carolus Linnaeus e a Taxonomia (1753):</p><p>Desenvolveu uma hierarquia de classificação para plantas.</p><p>Introduziu categorias como reino, classe, ordem, família, gênero e espécie.</p><p>Estabeleceu um padrão internacional para a classificação das espécies.</p><p>Simula</p><p>Desenvolvida no Norwegian Computing Center para simulação de eventos discretos.</p><p>Evoluiu para Simula 67, considerada a primeira linguagem de programação orientada a objetos.</p><p>Simula I baseado em Fortran (foco em cálculos científicos).</p><p>Simula 67 baseado em Algol 60 (mais versátil e claro na expressão de algoritmos).</p><p>Introdução de conceitos fundamentais como classes, objetos, herança e encapsulamento.</p><p>Paradigma OO permitiu modelagem modular e eficiente de sistemas complexos.</p><p>Estabeleceu as bases para a programação moderna, orientada a resolver problemas específicos em vez de focar apenas em computadores.</p><p>Smalltalk</p><p>Criado por Alan Kay no Xerox PARC.</p><p>Introduziu conceitos-chave da orientação a objetos: classes, objetos, herança, polimorfismo e encapsulamento.</p><p>Evolução para Smalltalk-80:</p><p>Incluiu uma interface gráfica de usuário (GUI) e um ambiente de desenvolvimento integrado (IDE).</p><p>Redefiniu o desenvolvimento de software e estabeleceu bases para a programação moderna.</p><p>Legado e Influência:</p><p>Conceitos do Smalltalk continuam relevantes, influenciando a criação de linguagens e ferramentas de software atuais.</p><p>Contribuições de Alan Kay foram cruciais para a popularização da orientação a objetos e para a evolução do software.</p><p>MOTIVOS PARA ADOTAR ORIENTAÇÃO A OBJETOS</p><p>Surgiu para superar as limitações da programação estruturada.</p><p>Foca em organizar a complexidade através da criação de objetos que representam entidades do mundo real com dados (atributos) e comportamentos (métodos).</p><p>Cada objeto tem seu escopo bem definido, facilitando a modularização e o entendimento do código.</p><p>Reduz a duplicação de código ao encapsular dados e métodos dentro de objetos.</p><p>Melhora a manutenção e compreensão do sistema, pois objetos interagem de maneira clara e definida.</p><p>Adequada para sistemas complexos, permitindo uma modelagem mais natural e intuitiva das necessidades do problema.</p><p>Reúso</p><p>Envolve reutilização de comportamentos (operações e serviços) e informações (dados e características).</p><p>Reduz a propensão a erros e evita duplicação de código.</p><p>Proporciona uma modelagem mais próxima do mundo real, reduzindo o "gap semântico" entre software e realidade.</p><p>Promove maior coesão e menor acoplamento, resultando em sistemas mais eficientes e de fácil manutenção.</p><p>Gap semântico</p><p>Diferença entre a representação de conceitos em diferentes linguagens ou paradigmas de programação.</p><p>Pode causar erros de implementação e comprometer a coesão entre componentes em sistemas de informação.</p><p>Resulta de discrepâncias na interpretação dos requisitos por diferentes objetos.</p><p>Gap semântico ocorre quando há falta de alinhamento na troca de mensagens entre objetos (emissor e receptor).</p><p>Práticas de modelagem de domínio precisa e comunicação clara entre objetos são fundamentais para melhorar a coesão, reduzir o acoplamento e aumentar a qualidade do sistema.</p><p>Coesão e acoplamento</p><p>Coesão: Refere-se à clareza e foco dos elementos de um módulo. Alta coesão melhora a compreensão, manutenção e reutilização.</p><p>Acoplamento: Descreve o grau de dependência entre módulos. Baixo acoplamento facilita a flexibilidade e extensibilidade do sistema.</p><p>PRINCÍPIOS FUNDAMENTAIS DA ORIENTAÇÃO A OBJETOS</p><p>Encapsulamento: Oculta detalhes internos dos objetos e fornece uma interface externa. Garante integridade e segurança dos dados.</p><p>Herança: Permite que uma classe herde atributos e métodos de outra, promovendo a reutilização de código e criando hierarquias de classes.</p><p>Associação: Modela a relação entre objetos, facilitando interações complexas e a implementação de funcionalidades.</p><p>PRINCÍPIOS FUNDAMENTAIS DA ORIENTAÇÃO A OBJETOS</p><p>Abstração:</p><p>Simplifica a complexidade do mundo real ao focar nos aspectos essenciais de um objeto, ignorando detalhes irrelevantes.</p><p>Facilita a construção de sistemas modulares e flexíveis, permitindo interações simplificadas com objetos.</p><p>TÓPICO 2</p><p>CONCEITOS ESTRUTURAIS,</p><p>RELACIONAIS E ORGANIZACIONAIS</p><p>Metas de Aprendizagem</p><p>Introduzir os conceitos da orientação a objetos.</p><p>Definir e aprofundar os principais conceitos de orientação a objetos.</p><p>Entender os aspectos fundamentais: estrutural, relacional e organizacional.</p><p>Classificar os aspectos estruturais: classe, atributo, método, objeto e mensagem.</p><p>Classificar os aspectos relacionais: herança, polimorfismo, associação e interface.</p><p>Classificar os aspectos organizacionais: pacotes e visibilidade.</p><p>Abordar exemplos intrínsecos aos conceitos aprendidos.</p><p>ASPECTO ESTRUTURAL</p><p>O aspecto estrutural da OO diz respeito à organização das classes e objetos no sistema, compreendendo a definição de classes, atributos, métodos e objetos.</p><p>São esses elementos que formam a base da programação orientada a objetos, permitindo a modelagem de entidades e comportamentos que refletem o mundo real.</p><p>ASPECTO RELACIONAL</p><p>O aspecto relacional, por sua vez, engloba a interação e comunicação entre os objetos dentro do</p><p>sistema.</p><p>Isso inclui conceitos como herança e associações, os quais colaboram para alcançar os objetivos desejados, assegurando a integração e o fluxo eficiente de informações entre os componentes do sistema.</p><p>ASPECTO ORGANIZACIONAL</p><p>Já o aspecto organizacional refere-se à estruturação do código-fonte em pacotes e à sua visibilidade.</p><p>Essa organização é fundamental para garantir uma arquitetura sólida, flexível e de fácil manutenção.</p><p>OS CONCEITOS ESTRUTURAIS</p><p>Objeto:</p><p>É uma instância de uma classe que representa uma entidade específica do mundo real ou um conceito abstrato.</p><p>Contém dados e métodos, combinando estado e comportamento, permitindo que o software simule aspectos do mundo real.</p><p>Classe:</p><p>Serve como um molde ou modelo para criar objetos.</p><p>Define os atributos (características) e métodos (comportamentos) que seus objetos associados terão, estabelecendo a estrutura e funcionalidade comuns a todos os objetos dessa classe.</p><p>OS CONCEITOS ESTRUTURAIS</p><p>Objeto</p><p>Classe</p><p>OS CONCEITOS ESTRUTURAIS</p><p>Atributo:</p><p>São as propriedades ou características que um objeto possui.</p><p>Representam o estado do objeto, armazenando informações específicas, como nome, idade ou cor.</p><p>Método:</p><p>São as operações ou ações que um objeto pode realizar.</p><p>Definem o comportamento do objeto, especificando como ele interage consigo mesmo ou com outros objetos, executando tarefas ou modificando seu estado.</p><p>Mensagem:</p><p>Mecanismo de comunicação entre objetos.</p><p>Quando um objeto envia uma mensagem para outro, ele está solicitando a execução de um método, permitindo a interação e coordenação entre diferentes partes do sistema.</p><p>OS CONCEITOS ESTRUTURAIS</p><p>OS CONCEITOS RELACIONAIS</p><p>Herança:</p><p>Definição: Herança é um mecanismo pelo qual uma classe (chamada de subclasse ou classe derivada) pode herdar atributos e métodos de outra classe (chamada de superclasse ou classe base). Isso permite que a subclasse reutilize e estenda o comportamento da superclasse.</p><p>Como Funciona: Na herança, a subclasse automaticamente possui todas as propriedades e métodos da superclasse, podendo adicionar novos atributos e métodos ou modificar (sobrescrever) os existentes. Isso promove a reutilização de código, já que características comuns são definidas na superclasse e compartilhadas por suas subclasses.</p><p>Exemplo: Imagine uma classe Animal com atributos como nome e idade e métodos como comer() e dormir(). A classe Cachorro pode herdar de Animal, ganhando automaticamente esses atributos e métodos, além de poder adicionar métodos específicos, como latir().</p><p>OS CONCEITOS RELACIONAIS</p><p>Classe base (superclasse): a classe base concede características a outras classes. Ela serve como um modelo genérico, definindo atributos e métodos comuns. Por exemplo, uma classe base chamada “Pessoa” pode ter campos como “Nome” e “Idade”.</p><p>Classe derivada (subclasse): a classe derivada herda características da classe base. Ela é uma implementação específica de um caso mais geral. Por exemplo, uma classe derivada “Funcionário” pode herdar os campos “Nome” e “Idade” da classe “Pessoa” e adicionar um campo adicional, como “Cargo”.</p><p>OS CONCEITOS RELACIONAIS</p><p>HERANÇA SIMPLES</p><p>Ocorre quando uma subclasse tem apenas uma superclasse.</p><p>Nesse caso, a classe filha especializa e reutiliza membros de apenas um conceito, que é a classe mãe da aplicação.</p><p>No contexto do hospital, exemplos de heranças simples (Figura 3) incluem: a classe “Funcionario” herdando de “Pessoa”; a classe “Paciente” herdando de “Pessoa”; a classe “Médico” herdando de “Funcionário”</p><p>OS CONCEITOS RELACIONAIS</p><p>HERANÇA MÚLTIPLA</p><p>Ocorre quando uma subclasse herda atributos e métodos de duas ou mais classes.</p><p>No contexto hospitalar, um exemplo disso seria a classe “Residente”, que herda características tanto da classe “Funcionário” quanto da classe “Médico”.</p><p>Como um residente é tanto um funcionário do hospital quanto um médico em formação, essa abordagem permite que a classe “Residente” tenha acesso aos comportamentos e características de ambas as classes, simplificando a modelagem de sua função dentro do sistema hospitalar.</p><p>No entanto, é importante ter cautela ao utilizar herança múltipla devido à complexidade que pode introduzir e aos possíveis desafios de ambiguidade no código.</p><p>OS CONCEITOS RELACIONAIS</p><p>OS CONCEITOS RELACIONAIS</p><p>Polimorfismo, do grego "muitas formas", é um conceito fundamental na Orientação a Objetos que permite que objetos de diferentes classes sejam tratados como objetos de uma classe comum.</p><p>Isso significa que um único método pode ter implementações diferentes em várias classes, e a decisão sobre qual implementação usar é feita em tempo de execução.</p><p>O polimorfismo oferece flexibilidade e extensibilidade ao software, permitindo que um único método se adapte ao tipo de objeto que o invoca.</p><p>OS CONCEITOS RELACIONAIS</p><p>OS CONCEITOS RELACIONAIS</p><p>Associação:</p><p>Definição: Associação é uma relação entre dois ou mais objetos que permite que eles interajam. Essa relação é mais flexível do que herança, pois não implica uma relação de “é um” entre os objetos, mas sim uma relação de “tem um” ou “usa um”.</p><p>Como Funciona: Na associação, um objeto contém uma referência a outro objeto, permitindo que eles colaborem para realizar tarefas. A associação pode ser unidirecional (um objeto conhece o outro, mas não vice-versa) ou bidirecional (ambos os objetos se conhecem).</p><p>OS CONCEITOS RELACIONAIS</p><p>OS CONCEITOS RELACIONAIS</p><p>Pacotes (Packages):</p><p>Pacotes são agrupamentos de classes, interfaces e outros pacotes relacionados que são organizados em uma estrutura hierárquica. Eles são utilizados para estruturar o código de maneira lógica, promovendo modularidade e organização em grandes projetos de software.</p><p>Benefícios:</p><p>Modularidade: Facilita a manutenção e o desenvolvimento de grandes sistemas, permitindo que partes do código sejam desenvolvidas e testadas independentemente.</p><p>Reusabilidade: Classes e interfaces em pacotes podem ser facilmente reutilizadas em outros projetos.</p><p>Facilidade de Manutenção: A organização em pacotes torna o código mais legível e fácil de entender, o que facilita a manutenção e a atualização.</p><p>OS CONCEITOS RELACIONAIS</p><p>Visibilidade (Níveis de Acesso):</p><p>Visibilidade refere-se ao controle de acesso a classes, métodos e atributos de um programa. Determina o nível de exposição desses elementos para outras partes do código, seja dentro do mesmo pacote ou fora dele.</p><p>Público (public): Elementos marcados como públicos são acessíveis de qualquer lugar, tanto dentro do mesmo pacote quanto em pacotes diferentes.</p><p>Protegido (protected): Elementos protegidos são acessíveis dentro do mesmo pacote e por subclasses, mesmo que estejam em pacotes diferentes.</p><p>Privado (private): Elementos privados são acessíveis apenas dentro da classe em que são definidos.</p><p>TÓPICO 3</p><p>BOAS PRÁTICAS NO USO DA ORIENTAÇÃO A OBJETOS</p><p>Metas de Aprendizagem</p><p>Compreender as Boas Práticas na Orientação a Objetos em Java para criar sistemas eficientes.</p><p>Priorizar a coesão e minimizar o acoplamento entre classes, evitando o uso excessivo de strings.</p><p>Ser objetivo na fase de projeto, sem tentar prever o futuro desnecessariamente.</p><p>Criar métodos com clareza e eficiência para um código mais legível e fácil de manter.</p><p>Dominar o uso de coleções para manipular dados para a otimização do código.</p><p>Sobrecrever métodos como equals, hashCode e toString adequadamente para garantir o comportamento esperado dos objetos.</p><p>Avaliar cuidadosamente a associação em vez da herança para promover uma estruturação adequada do código.</p><p>Preocupe-se com a coesão e o acoplamento</p><p>Alta coesão refere-se ao grau em que os elementos de um módulo (classe, método, etc.) estão relacionados e trabalham juntos para cumprir um único propósito ou responsabilidade. Em outras palavras, uma classe com alta coesão possui uma função clara e seus atributos e métodos estão intimamente ligados para realizar essa função.</p><p>Baixo acoplamento se refere ao grau em que os módulos de um sistema dependem uns dos outros. Um sistema com baixo acoplamento tem módulos</p><p>(ou classes) que interagem entre si, mas são independentes em termos de implementação e alteração.</p><p>Preocupe-se com a coesão e o acoplamento</p><p>Use strings com parcimônia</p><p>Evitar o uso excessivo e inadequado de strings em programação. Strings são sequências de caracteres amplamente utilizadas para representar texto, mas seu uso descontrolado ou desnecessário pode levar a problemas de desempenho, manutenção, segurança e clareza no código.</p><p>Usar strings com parcimônia não significa evitar completamente seu uso, mas sim usá-las de maneira consciente e adequada. Aplicando boas práticas de programação, como evitar concatenações desnecessárias, centralizar strings em constantes e utilizar tipos de dados adequados.</p><p>Seja objetivo, não tente prever o futuro</p><p>A criação de classes excessivamente genéricas pode resultar em código difícil de entender.</p><p>Elas podem perder seu propósito original e acabar sendo usadas em contextos em que não fazem sentido.</p><p>Além disso, isso pode levar a um alto acoplamento entre as classes, já que muitas dependências serão criadas em relação a essa classe genérica.</p><p>Qualquer modificação nessa classe pode afetar todo o sistema.</p><p>Crie seus métodos com carinho</p><p>A organização adequada dos métodos em uma classe é crucial para garantir a legibilidade e manutenção do código.</p><p>Reduzir o tamanho dos métodos, evitar a repetição de código e cuidar da passagem de parâmetros são práticas essenciais para melhorar a qualidade do software.</p><p>Seguir os princípios da programação orientada a objetos é fundamental para desenvolver sistemas mais claros e sustentáveis.</p><p>Conheça e use coleções</p><p>Coleções são estruturas de dados que permitem armazenar, organizar e manipular grupos de objetos de maneira eficiente.</p><p>Elas são amplamente utilizadas em programação para lidar com grandes volumes de dados e facilitar operações como pesquisa, inserção, exclusão e ordenação.</p><p>As coleções fornecem uma maneira conveniente de agrupar objetos relacionados e operá-los como uma unidade, em vez de manipular cada elemento individualmente.</p><p>Elas fazem parte dos principais frameworks de programação e oferecem uma série de interfaces e classes para diferentes necessidades.</p><p>Sobrescreva equals, hashCode e toString</p><p>equals():</p><p>O método equals() é sobrescrito para fornecer uma comparação lógica entre objetos. Ele verifica se o objeto atual (this) é o mesmo que o objeto passado como argumento (obj). Se não for, ele verifica se o tipo do objeto é o mesmo e compara os atributos relevantes (nome e idade).</p><p>hashCode():</p><p>O método hashCode() deve ser consistente com o equals(). Se dois objetos são considerados iguais pelo método equals(), eles devem ter o mesmo código hash. Aqui, usamos o método Objects.hash() para gerar um código hash baseado nos atributos nome e idade.</p><p>toString():</p><p>O método toString() fornece uma representação em string do objeto, geralmente para fins de depuração e log. Ele retorna uma string que inclui o nome da classe e os valores dos atributos do objeto.</p><p>Às vezes, é melhor associar em vez de herdar</p><p>Na programação orientada a objetos, tanto a herança quanto a associação são maneiras de reutilizar código e modelar relacionamentos entre classes. No entanto, há situações onde optar por associação em vez de herança pode ser mais vantajoso.</p><p>Embora a herança seja uma poderosa ferramenta para reutilização de código, ela deve ser usada com cautela, especialmente quando a relação entre classes não é estritamente hierárquica ou se a flexibilidade e a extensibilidade são necessárias. Associação, composição e uso de interfaces são alternativas valiosas que ajudam a manter o código mais claro, desacoplado e adaptável a mudanças.</p><p>Se for o caso, evite a herança ou, pelo menos, a</p><p>sobrescrita</p><p>Embora a herança e a sobrescrita de métodos sejam ferramentas úteis na programação orientada a objetos, elas devem ser usadas com cautela.</p><p>Optar por composição, delegação e uso de interfaces pode levar a um design mais robusto, flexível e fácil de manter.</p><p>Avalie cuidadosamente as necessidades do seu sistema e escolha a abordagem que oferece a maior clareza, simplicidade e capacidade de manutenção.</p><p>Preocupe-se com o encapsulamento</p><p>Encapsulamento é um princípio central na programação orientada a objetos que melhora a segurança, a manutenibilidade e a modularidade do código.</p><p>Ele protege o estado interno de um objeto, expõe uma interface pública bem definida e permite a implementação de lógica de negócios de forma segura.</p><p>Ao se preocupar com o encapsulamento, os desenvolvedores podem criar sistemas mais robustos, flexíveis e fáceis de manter, promovendo boas práticas de design de software.</p><p>Saiba usar interface e classe abstrata no momento certo</p><p>Interfaces e classes abstratas são ferramentas poderosas na programação orientada a objetos, cada uma com seu propósito específico.</p><p>Entender quando e como usá-las é crucial para projetar sistemas de software robustos, flexíveis e fáceis de manter.</p><p>Escolha interfaces para definir contratos e garantir flexibilidade e use classes abstratas para compartilhar comportamento comum e encapsular estado entre classes relacionadas.</p><p>A aplicação adequada desses conceitos levará a um design mais eficiente e sustentável.</p><p>Evite especializar o já especializado</p><p>Evitar a superespecialização é essencial para manter um design de software simples, flexível e fácil de manter.</p><p>Ao usar composição, padrões de projeto, delegação e interfaces, você pode adicionar e modificar comportamentos sem a complexidade e os problemas que vêm com hierarquias profundas de herança.</p><p>Mantenha o foco na clareza, modularidade e simplicidade para criar sistemas de software robustos e adaptáveis.</p><p>Use membros estáticos com parcimônia</p><p>Membros estáticos são úteis em muitas situações, mas devem ser usados com cautela para evitar problemas de flexibilidade, manutenção e testes.</p><p>Ao aplicar o encapsulamento, polimorfismo e princípios de design orientados a objetos, você pode criar sistemas de software que são mais robustos, adaptáveis e fáceis de manter.</p><p>Use membros estáticos com parcimônia e sempre considere alternativas que promovam um design mais modular e desacoplado.</p><p>HORA DA ATIVIDADE PRÁTICA!</p><p>54</p><p>http://bit.do/eNSP9</p><p>55</p><p>image1.png</p><p>image2.jpeg</p><p>image3.png</p><p>image4.png</p><p>image5.png</p><p>image6.jpg</p><p>image7.png</p><p>image8.png</p><p>image9.png</p><p>image10.png</p><p>image11.png</p><p>image12.png</p><p>image13.png</p><p>image14.png</p><p>image15.png</p><p>image16.png</p><p>image17.png</p>

Mais conteúdos dessa disciplina