Prévia do material em texto
Aula 01 Programação Orientada a Objetos (POO) Representação com Objetos Reutilização de Códigos Herança - Pai > Filho Polimorfismo Encapsulamento - capacidade de esconder detalhes da classe Abstração Há várias formas de pensar a construção de um programa, e a elas damos o nome de “paradigmas de linguagem de programação”. Segundo o dicionário online Dicio, um objeto é uma “coisa material que pode ser percebida pelos sentidos (visão, audição, tato, olfato e paladar): uma bola é um objeto, um lápis é um objeto, um celular é um objeto” (OBJETO, 2023). Cada Objeto possui características diferentes Cada Objeto possui um conjunto de Atributos diferentes Segundo Barnes e Kölling (2010), “os objetos podem ser categorizados e uma classe descreve – de maneira abstrata – todos os objetos de um tipo particular”. Classe é Genérica e Objeto é Específico Classe > Objeto > Atributo 1x Classe pode possuir vários Objetos 1x Objeto pode possuir vários Atributos Lembre-se: um objeto não é uma definição genérica sobre algo, mas uma coisa material. Uma bola vermelha de borracha é um objeto, e uma bola branca com detalhes pretos e fabricada com couro é outro objeto. Ainda que as duas sejam bolas (mesma categoria), trata-se de objetos distintos. Classes é uma representação genérica de um conjunto de objetos Objetos são coisas específicas do mundo real Bola > Bola Azul Plástico Bola Vermelha Couro Classe: Bola Objeto(s): Bola Azul Plástico, Bola Vermelha Couro Atributo(s): Cor, Material Se dermos valores aos atributos, estamos definindo objetos Uma Classe deve ter um nome que a represente, mas, além do nome, ela pode ter: • campos/atributos/propriedades, que representam as características da classe (por exemplo, para uma cadeira, um campo pode ser a quantidade de pernas, e outro campo pode ser o material de fabricação); • métodos, que representam o comportamento de uma classe (por exemplo, a classe Calculadora possui métodos como somar, subtrair, etc., enquanto para a classe Cachorro um método possível poderia ser latir); e • construtores, métodos especiais que inicializam uma classe no momento de sua criação (veremos mais sobre construtores na prática). Abstração - “abstração é a capacidade de ignorar detalhes das partes para focalizar a atenção em um nível mais elevado de um problema”. Encapsulamento - No encapsulamento, como no carro, criamos uma forma de esconder outras classes. Por exemplo, no caso da conta bancária, escondemos a lógica usada para fazer depósitos e saques. Essa técnica permite esconder os detalhes de implementação de uma classe. Atributos e Métodos private só podem ser acessados dentro da classe em que foram declarados, enquanto atributos descritos como public (públicos) podem ser acessados dentro e fora da classe. Com esses controles de acesso, conseguimos implementar a técnica de encapsulamento. Quando projetamos as classes, usamos a herança e o polimorfismo para construir programas melhores. A herança permite criar classes que herdam comportamentos e atributos de outra classe, mas possibilitando que as classes filhas tenham comportamentos especializados – ou seja, além da herança, essas novas classes podem definir novos métodos e atributos. Já o polimorfismo é uma técnica bem útil para mudar comportamentos nas classes filhas ou até mesmo para permitir a interação entre classes que não se conhecem. Na POO, o design orientado a objetos (OOD, do inglês object-oriented design) ajuda a projetar e a modelar o sistema. Nesse ponto, trabalhamos com o modelo conceitual do sistema a fim de identificar, definir e projetar classes e objetos de um sistema complexo, bem como seu relacionamento e implementação. De acordo com Fowler (2005, p. 25), “UML (Unified Modeling Language) é uma família de notações gráficas, apoiada por um metamodelo único, que ajuda na descrição e no projeto de sistemas de software”. Assim, a UML é um modo de modelar e desenhar sistemas de forma gráfica que nos ajuda a representar as abstrações dos objetos a fim de facilitar discussões e até implementar classes. UML - linguagem gráfica de modelagem orientada a objetos Classes são representações genéricas de um conjunto de objetos, além de ser um dos componentes básicos da orientação a objeto, por exemplo, um carro possui uma cor, aceita um tipo de combustível e corre. Classes e Objetos são conceitos diferentes, mas complementares. A classe permite ao desenvolvedor criar uma descrição formal sobre um conjunto de objetos que são agrupados por suas características e comportamentos. Por exemplo: objeto 1 é um carro vermelho com motor Flex e que corre; objeto 2 é um carro azul com motor a gasolina e que corre; objeto 3 é um carro prata a álcool e que corre. Os três objetos podem ser descritos por uma classe que possui dois atributos, “cor” e “combustível” e por um único comportamento “correr”. Logo, classe é uma definição genérica de um grupo de objetos, e um objeto é uma instância dessa classe, a qual tem valores atribuídos e comportamentos associados. Classe – Genérico Objeto – Específico (pode conter vários atributos) Atributos – Variáveis Métodos – funções, comportamentos, ações Classe Carro Atributo(s) Cor – Ano Objeto(s) Carro Azul 2020 Método(s) Andar Aula 02 Em POO, o termo encapsulamento se refere às classes, nas quais conseguimos reunir, sob um mesmo nome, um conjunto de atributos (propriedades do objeto) e funções (comportamento dos objetos). Modificadores de Acesso: · public: acesso público, qualquer outra classe tem acesso; e · private: somente a classe a qual pertence tem acesso. Em C#, para comparar um texto (string) com outro, é necessário usar o método Equal. Sugiro a leitura dessa parte da documentação para você saber as diversas formas de uso deste método (texto em inglês). No exemplo, é possível fazer a comparação ignorando letras maiúsculas e minúscula, basta usar o seguinte código: String.Equals(tipo, "herói", StringComparison.OrdinalIgnoreCase) Construtor terá o mesmo nome da classe Aula 03 A herança, um dos pilares da programação orientada a objetos, permite a nós, desenvolvedores, usar técnicas avançadas que facilitam a manutenção e a reutilização do código (SCHILDT; SKRIEN, 2013). A herança pertence às classes e permite passar características para classes herdeiras. Temos a classe-base, ou pai, que fornece a herança, e temos a subclasse, ou classe derivada, que herda as características da classe-base. Tipos de Herança: · Herança Simples · Herança Hierárquica · Herança Multinível Em C# não existe herança múltipla, um tipo em que uma subclasse pode herdar características de duas ou mais classes-base ao mesmo tempo. Na herança, as subclasses herdam todos os atributos e métodos da classe-base, mas não herdam os construtores (estáticos e não estáticos) nem os finalizadores (destrutores). Além disso, os modificadores de acesso (private, public e protected) afetam essa herança. No nosso exemplo, se a classe A tiver algum atributo ou método privado, as subclasses dela não os herdarão. Já se o atributo ou método for protected, somente a primeira subclasse na hierarquia conseguirá herdar, a próxima não. Polimorfismo: · Sobrecarga de Métodos (overloading) · Substituição de Métodos ou Sobreposição de Métodos (overriding) Sobrecarga de métodos pode ser usada em qualquer classe, e sobrescrita de métodos somente em subclasses. A sobrecarga de métodos consiste em criar dois ou mais métodos com o mesmo nome, porém com parâmetros diferentes. Fazer isso em subclasses ou em classes que não herdam de nenhuma outra é possível, visto que a sobrecarga pode ser de métodos herdados ou de métodos da própria classe. A sobrescrita de métodos, ou overriding, só existe em subclasse, ou seja, classes que herdam de outra classe, uma vez que essa técnica consiste em sobrescrever um método herdado. Aula 04 Requisitos Funcionais: o que o software irá fazer, o que o cliente quer... Requisitos Não Funcionais: usabilidade, confiabilidade... Aula 05 O que é casode uso em UML? A UML (Unified Modeling Language) define 13 tipos de diagramas, no conjunto de diagrama de comportamento temos o Diagrama de Caso de Uso que tem por objetivo representar a interação entre atores e o sistema a ser desenvolvido. Aula 06 Modelo Conceitual Da ideação do que queremos desenvolver ao código que deve ser desenvolvido, temos que passar por algumas etapas de design/planejamento. Sobre o modelo de domínio no nível conceitual, é correto afirmar que: O modelo de domínio no nível conceitual é utilizado para representar o conhecimento específico de uma área diretamente relacionado ao problema. Com ele entendemos melhor quais são as entidades envolvidas, seus atributos e suas relações com outras entidades. Aula 07 Quando desenvolvemos um código buscamos classes mais coesas e com baixo acoplamento para aumentar a reutilização e facilitar a manutenção, já que a alta coesão significa ter classes com objetivos bem específicos. Além disso, buscar o baixo acoplamento é importante para ajudar a ter a melhor manutenção, visto que ter uma quantidade pequena de dependência entre classes diminui a complexidade do código. Aula 08 Os padrões GoF são classificados em padrões criacionais, estruturais e comportamentais. Este catálogo conta com um total de 23 padrões. Já os padrões GRASP são divididos em 9 padrões, sendo baixo acoplamento e alta coesão exemplos de padrões deste catálogo. Anotações: Modelagem Conceitual - Diagrama de Casos de Uso - Diagrama de Classes