A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Área de Desenvolvimento de Sistemas

Apresentações semelhantes


Apresentação em tema: "Área de Desenvolvimento de Sistemas"— Transcrição da apresentação:

1 Área de Desenvolvimento de Sistemas
SEGUNDA FASE

2 Programação Orientada a Objetos em C#
André de Oliveira Ruz

3 A base de O.O. Encapsulamento Herança Polimorfismo
Não mostre as cartas de seu baralho. Herança “Filho de peixe, peixe é”. Polimorfismo Vamos nos adaptar!

4 Na Programação estruturada, temos...
type pessoa = record nome: string[60]; endereco: string[60]; fone: string[13]; string[60]; end; var pes:array[1..50] of pessoa; i: integer; quantpes: integer struct pessoa { char nome[60]; char endereco[60]; char fone[13]; char [60]; }; struct pessoa pes[50]; int i; int quantpes;

5 Mamíferos O que é uma classe?
Qual é a semelhança? Podemos dividi-los em uma classe, uma categoria comum? Mamíferos Atributos são as características de uma classe visíveis externamente. Classe: atributos e comportamentos compartilhados por um tipo de objeto. Atributos: cor dos olhos, cor da pele,(...) Características de uma classe visíveis externamente. Uma classe define todas as características comuns a um tipo de objeto. Especificamente, a classe define todos os atributos e comportamentos expostos pelo objeto (compartilhados). A classe define a quais mensagens o seu objeto respondem. 1º) O objeto força a visualização em nível conceitual 2º) Isso leva a você pensar em como o sistema será implementado, mas sem o aprofundamento técnico, ou seja de forma a imaginar o sistema em termos naturais e reais. Quando recua e pensa nos termos que está resolvendo, você evita se emaranhar nos detalhes da implementação. É mesmo que algum objeto de alto nível precise interagir com o computador ele isolará essas interações do restante do sistema (encapsulamento). 3º) Assim é possível modelar utilizando nosso próprimo padrão de linguagem (o que é natural), utilizando substantivos, vervos e adjetivos dentro das margens de seu problema. - substantivos: indicam os objetos - verbos: indicam as ações do objeto - adjetivos: indicam as qualidades do objeto

6 Através de uma MENSAGEM
O.O. Para o objeto relógio você pode “pedir” para adiantar ou atrasar as horas e minutos. Mas como pedir? Através de uma MENSAGEM Você pode enviar uma mensagem para que o objeto exerça um comportamento. Esse comportamento deve alterar algum estado do objeto; em nosso caso a troca de horas e minutos. Você deve associar: mensagem >> comportamento >> chamada de MÉTODO estado >> variáveis internas do objeto Encapsular é englobar, podemos pensar até mesmo no sentido de querer “ocultar”. O objeto engloba o estado e o comportamente. Agora imaginemos um cachorro e vejamos: O estado: dormindo, acordado, com raiva, doente... (variáveis internas) O comportamento (de acordo com o estado há um comportamento): são os métodos, o que o objeto faz. O estado pode influenciar no comportamento. Se o cachorro está doente ele levanta a perna devagar... Pensar em estado e comportamento de um animal não é muito diferente do que pensar em estado e comportamento de um objeto, só que um animal possui um sistema extremamente complexo e o nosso objetivo é a construção de objetos o mais simples possível. (...) Aí você me pergunta: mas não podemos imaginar um animal complexo como um objeto? E eu digo SIM, só que o nosso objetivo é olhar parte por parte desse sistema complexo de forma a dividir esse sistemas em vários objetos simples interligados que no todo formam um objeto complexo. Agora imaginemos que possamos ter uma classe cão. Essa classe pode ser identificada como um corpo sem a “alma”, sendo que o objeto seria a “alma” + classe. Ou seja, podemos ter um Scoobi-Doo, um Rabujento, um Snoop,...

7 Classes É um conjunto de códigos de programação que incluem a definição dos atributos e dos métodos necessários para a criação de um ou mais objetos. Contém toda a descrição da forma do objeto, é um molde para a criação do objeto, é uma matriz geradora de objetos, é a fábrica de objetos. Uma classe também é um tipo definido pelo usuário

8 Objeto ou Instância Tem determinadas propriedades que o caracterizam e que são armazenadas no próprio objeto. As propriedades de um objeto são chamadas ainda de atributos. O Objeto interage com o meio e em função de excitações que sofre, realiza determinadas ações que alteram o seu estado (atributos). Um objeto é uma entidade única que reúne atributos e métodos, ou seja, reúne as propriedades do objeto e as reações aos estímulos que sofre.

9 Classes e Objetos Objetos Classes
Estrutura formada por atributos (características) e métodos (ações) Geralmente representam objetos do mundo real (Cliente, Veículo, Aluno, etc) Classes São “moldes” de objetos São responsáveis por criar instâncias de objetos Definem os atributos e métodos dos objetos

10 Benefícios da Orientação a Objetos
Programação Estruturada Orientação a Objetos Processo Objeto Revela Dados Oculta Dados Falar sobre a importância da OO. Por que é Encapsulamento de erros Proteção de código Projeto Monolítico Projeto Modular Uso Único Reutilização Algoritmo Ordenado Algoritmo Desordenado

11 Classes e Objetos Como definir uma classe e seus atributos
public class Cliente { private int clienteId; private string nome; private decimal limiteCredito; private int quantidadeProdutos; } Como criar uma instância de uma classe Cliente novoCliente = new Cliente();

12 Atributos Atributos de Classe Atributos de Objeto
Quando um atributo é dividido entre todos os objetos criados, ele é armazenado na classe. EX: Um contador de relógios criados. Atributos de Objeto Quando um atributo é individual ele é armazenado no objeto. EX: A hora de um relógio.

13 Métodos As ações ou comportamento dos objetos são chamadas na orientação a objeto de métodos, assim, um método é uma função, um serviço fornecido pelo objeto. Os comportamentos do objeto são definidos na classe através dos métodos e servem para manipular e alterar os atributos do objeto. Em um programa orientado a objeto, as excitações são representadas por mensagens que são enviadas a um objeto. Uma mensagem pode ser gerada pelo usuário, por exemplo, ao clicar o mouse.

14 Métodos Um método é um comando que representa uma ação class Cliente {
private int produtosAdquiridos; public bool EClienteEspecial() { if (produtosAdquiridos < 250) return false; return true; } public void ComprarEspecial() { /* AÇÃO */ ... Cliente proximoCliente = new Cliente(); bool clienteEspecial = proximoCliente.EClienteEspecial(); if (clienteEspecial) proximoCliente.ComprarEspecial();

15 Métodos Passando parâmetros por valor class Cliente {
private int produtosAdquiridos; public void DefineProdutosAdquiridos(int quantidade) { produtosAdquiridos = quantidade; } ... Cliente novoCliente = new Cliente(); int produtos = 255; novoCliente.DefineProdutosAdquiridos(produtos); //OR novoCliente.DefineProdutosAdquiridos(200);

16 Métodos Passando parâmetros por referência (usando ref)
public void RetornaEndereco(ref int numero, ref string rua) { numero = this.numero; rua = this.rua; } int numeroLocal = 0; string ruaLocal = “”; novoCliente.RetornaEndereco(ref numeroLocal, ref ruaLocal); // numeroLocal e ruaLocal recebem novos valores

17 Métodos Passando parâmetros por referência (usando out)
public void RetornaEndereco(out int numero, out string rua) { numero = this.numero; rua = this.rua; } int numeroLocal; string ruaLocal; novoCliente.RetornaEndereco(out numeroLocal, out ruaLocal); // numeroLocal e ruaLocal são inicializados

18 Métodos - Sobrecarga Utilizando sobrecarga de métodos
public void DefineProdutosAdquiridos(int novoNumero) { this.produtosAdquiridos = novoNumero; } public void DefineProdutosAdquiridos(int novoNumero, bool clienteModificado) if (clienteModificado) public void DefineProdutosAdquiridos() this.produtosAdquiridos = RecuperaProdutos(this.ClienteID);

19 Construtores Construtores são métodos especiais responsáveis pela implementação de ações necessárias para a existência de um objeto public class Cliente { public int produtosAdquiridos; public readonly bool clienteEspecial; //Construtor default public Cliente() if (this.produtosAdquiridos > 250) this.clienteEspecial = true; else this.clienteEspecial = false; }

20 Construtores Sobrecarga de Construtores public class Cliente {
public string nomeCliente; public int clienteId; public Cliente(): this (“desconhecido”, 0) } public Cliente(string nome, int identificacao) this.nomeCliente = nome; this.clienteId = identificacao;

21 Membros de Classe Pertencem à classe e não às instâncias
Podem ser atributos, propriedades e métodos public class Cliente { public static string tipoEntidade = “Teste”; public static void Excluir(int identificacao) /* excluir cliente com essa identificação */ } ... Console.WriteLine(“Tipo de Entidade: {0}”, Cliente.tipoEntidade); int clienteId = 5; Cliente.Excluir(clienteId);

22 Herança A herança está relacionada as hierarquias e as relações entre os objetos. É o mecanismo em que uma classe filha compartilha automaticamente todos os métodos e atributos de sua classe pai. A herança permite implementar classes descendentes implementando os métodos e atributos que se diferenciam da classe pai.

23 Tipos de Herança Simples Múltipla
Quando uma classe herda as propriedades de uma única classe pai. Múltipla Ocorre quando uma classe tem mais de um pai.

24 Modificadores de Acesso
São utilizados para definir níveis de acesso aos membros da classe Declaração Definição public Acesso ilimitado private Acesso limitado à classe e seus membros internal Acesso limitado ao programa (assembly) protected Acesso limitado à classe, seus membros e seus derivados protected internal Acesso limitado à classe, classes derivadas ou membros deste programa (assembly)

25 Herança Criando uma classe derivada public class Pessoa {
public string nome; protected int id; public void Cadastrar() { /* rotina para cadastrar */ } } public class Cliente : Pessoa public void Comprar(int idProduto) { /* ação */ } ... Cliente proximoCliente = new Cliente(“Rodrigo”); proximoCliente.Cadastrar(); proximoCliente.Comprar(100);

26 Herança Invocando um construtor da classe base na classe derivada
public class Pessoa { public Pessoa(string nome) { Console.WriteLine(“Construindo Pessoa de Nome {0}”,nome); } } public class Cliente : Pessoa public Cliente(string nome) : base(nome) { Console.WriteLine(“Construindo Cliente”); } ... Cliente proximoCliente = new Cliente(“Rodrigo”); Construindo Pessoa de Nome Rodrigo Construindo Cliente

27 Herança Classes Seladas – são classes que não podem ser estendida ou sobrescritas, ou seja, não podemos ter classes derivadas de classes seladas public sealed class Pessoa { // Membros da Classe Pessoa }

28 Polimorfismo Polimorfismo significa: “Muitas Formas” e representa o fato de uma determinada característica ser diferente para cada filho. Partimos de um objeto mais simples e que vai evoluindo. Os conceitos do objeto pai continuam a existir, mesmo que tenham sofrido modificações ou assumido novas formas. Métodos: Amamentar()

29 Polimorfismo Diretor Viajar() Parcerias Vendedor Viajar() Vendas
Comportamento Objetos Método Invocado Diretor Viajar() Parcerias Vendedor Viajar() Vendas Funcionario Viajar() Férias

30 Polimorfismo Utilizando métodos virtuais public class Pessoa {
public virtual void Viajar() { /* Ação */ } } public class Diretor : Pessoa { public override void Viajar() { base.Viajar(); /* Ações Particulares da Classe Diretor */ public class Vendedor : Pessoa { /* Ações Particulares da Classe Vendedor */

31 Encapsulamento Encapsulamento é o ato de esconder do usuário informações que não são de seu interesse. O objeto atua como uma caixa preta, que realiza determinadas operações mas o usuário não sabe e não precisa saber exatamente como. Basicamente o encapsulamento separa os elementos visíveis de um objeto dos invisíveis.

32 Propriedades São métodos que protegem acesso aos membros da classe
public string Nome { get { return nomeCliente; } set { nomeCliente = value; } } Como acessar as propriedades string nomeCliente = novoCliente.Nome; novoCliente.Nome = “Rodrigo Andrade”;

33 Classes Abstratas Nestes casos você apenas define a assinatura do método e deixa a definição por conta da classe que irá herdar a classe pai. Estas classes são então chamadas classes abstratas, o método que você não implementou é chamado de método abstrato. Servem de base para a criação de novas classes As classes abstratas não podem ser instanciadas através da palavra chave New. As semelhanças entre classe abstrata e interface são muitas. Uma interface é utilizada quando não existe a necessidade das classes derivadas herdarem métodos já implementados. Outra diferença é que interfaces não permitem a declaração de atributos, como as classes abstratas.

34 Classes Abstratas Uma classe abstrata é uma classe base genérica
Contém métodos abstratos que devem ser implementados nas classes que derivam dela Um método abstrato não apresenta implementação na classe base Pode conter membros não-abstratos public abstract class Pessoa { public abstract void Cadastrar(); public abstract string Nome { get; set; } public abstract int Id { get; } public virtual void Viajar() { /* Ação */ } }

35 Classes Abstratas Derivando a classe abstrata e implementando os membros abstratos public class Diretor : Pessoa { public override void Cadastrar() { /* Ações */ } public override string Nome get { /* Implementação get */ } set { /* Implementação set */ } } public override int Id

36 Interfaces Uma interface é parecida com uma classe abstrata, a diferença é que uma classe abstrata pode possuir métodos que não estejam implementados e pode possuir métodos que estejam implementados. Uma interface possui somente métodos que não estão implementados e que devem ser implementados pela classe que usar a interface.

37 Interfaces Como o C# não suporta herança múltipla as interfaces permitem que uma classe estenda múltiplas interfaces contornando o problema. Uma interface no C# não pode conter atributos, somente pode ter métodos, propriedades e eventos. Todos os membros de uma interface são públicos e não podem usar um modificador de acesso.

38 Interfaces A classe que implementa a interface deve possuir a definição de todos métodos existentes na interface. Esta definição deve possuir o mesmo nome e a mesma assinatura, retorno e parâmetros, do método na interface. O nome da classe e o nome da interface são separados por dois pontos(:). As semelhanças entre classe abstrata e interface são muitas. Uma interface é utilizada quando não existe a necessidade das classes derivadas herdarem métodos já implementados. Outra diferença é que interfaces não permitem a declaração de atributos, como as classes abstratas.

39 Interfaces Uma interface define a mesma funcionalidade e comportamento à classes não relacionadas diretamente Declarando a interface public interface IProduto { bool EPerecivel { get; } Fornecedor RecuperarFornecedor(); void RegistrarVenda(Cliente cliente); }

40 Interfaces Implementando a interface
public class Computador : IProduto { private bool ePerecivel; public bool EPerecivel get { return ePerecivel; } } public Fornecedor RecuperarFornecedor() return new Fornecedor(); public void RegistrarVenda(Cliente cliente) // Rotina para registrar vendas

41 Interfaces Pode tornar o comportamento de seus objetos semelhante ao comportamento dos objetos da .NET Framework Exemplos: ICollection IComparer IDictionary public class Cliente : Pessoa, IComparable { ... }

42 Prática Orientação a Objetos

43 Exercício Animais Classes Abstratas
Definiremos um conceito abstrato de Animal, Mamífero e Ovíparo, que será particularizado. Classes Derivadas Construiremos quatro classes derivadas, Cão, Gato, Galinha Visualização Será necessário usar um “console” para testar essas classes.

44 Heranças Animal Ovíparo objGalinha Mamífero objCachorro objGato

45 Herança ABSTRACT Indica uma classe, método ou propriedade que não admite instâncias diretamente. OVERRIDE Indica uma redefinição em uma classe derivada. VIRTUAL Indica um elemento da classe base que pode ser redefinido. THIS Indica um elemento da própria classe. BASE Indica um elemento da classe base. SEALED Indica uma classe que não admite derivadas. Em C#, as seguintes palavras-chave são úteis para explorar o conceito de herança:

46 Detalhes A classe abstrata Animal terá as seguintes particularidades :
Propriedades Nome, para identificar um Animal. TotalFilhotes, para o total de filhotes gerados. Métodos GerarFilhotes(Quantidade), para gerar novos filhotes. (Sera Sobrescrita) Atributos nome total A classe Mamífero terá a seguintes particularidades: Método: Amamentar, que informa que o filhote está sendo amamentado. A classe Ovíparo terá a seguintes particularidades: Método: Chocar, que informa que o filhote esta sendo chocado. As semelhanças entre classe abstrata e interface são muitas. Uma interface é utilizada quando não existe a necessidade das classes derivadas herdarem métodos já implementados. Outra diferença é que interfaces não permitem a declaração de atributos, como as classes abstratas.

47 Detalhes A classe Cao terá as seguintes particularidades :
Métodos GerarFilhotes(Quantidade), para gerar novos filhotes. (sobrescrito) Latir A classe Gato terá as seguintes particularidades : Miar A classe Galinha terá as seguintes particularidades : Cacarejar

48 Interfaces Existem dois motivos básicos para fazer uso de interfaces:
Uma interface é como um contrato que determina o que deve fazer parte de suas classes derivadas; Bibliotecas padronizadas de interfaces uniformizam a construção de projetos.

49 Herança Multipla Ornitorrinco Ovíparo Mamífero As semelhanças entre classe abstrata e interface são muitas. Uma interface é utilizada quando não existe a necessidade das classes derivadas herdarem métodos já implementados. Outra diferença é que interfaces não permitem a declaração de atributos, como as classes abstratas.

50 Diagrama Final


Carregar ppt "Área de Desenvolvimento de Sistemas"

Apresentações semelhantes


Anúncios Google