Orientação a objetos
     Leonardo Melo Santos
    http://about.me/leonardomelosantos
Conteúdo programático
● Introdução
  ○ Evolução das linguagens de programação
  ○ Paradigmas de programação
● Orientação a objetos
  ○   Conceitos
  ○   Diagramas
  ○   Modificadores de acesso
  ○   Construtores
  ○   Propriedades
Evolução das linguagens de
programação
Linguagem de máquina e linguagem montadora
● Muitos comandos para fazer alto simples;
● Exigência de muito conhecimento;
● Códigos não tão legíveis;

Linguagens de alto nível
● Popularização do uso dos computadores;
● Códigos mais amigáveis devido à complexidade dos
   problemas;
Paradigmas de programação
1) Paradigma imperativo
● Código mais amigágel que linguagens montadoras;
● Código sequencial;

2) Paradigma procedural
● Paradigma imperativo mas com o uso de subrotinas
  (funções e procedimentos);
Paradigmas de programação
3) Programação Modular e Estruturada
● Surgiu com a demanda de grandes projetos;
● Agrupamento de código-fonte através de
  módulos;
● Mais facilidade na manutenção do código-
  fonte;
Paradigmas de programação
4) Paradigma orientado a objetos
● O problema é partido em vários pedaços, a
   ponto de definirmos objetos/entidades;
● Visa aproximar a maneira como construímos
   os programas com o mundo real;
Orientação a objetos
Conceitos
● Classe e Objeto
● Abstração
  ○   Classificação/Instanciação;
  ○   Agregação/Composição;
  ○   Associações simples;
  ○   Encapsulamento;
  ○   Generalização/Especialização;
  ○   Polimorfismo;
O que é classe e o que é objeto?
● Uma classe é a descrição de um grupo de
  objetos com propriedades (atributos),
  comportamentos (métodos), e
  relacionamentos com outros objetos
  (associações e agregações);

● Objeto: Denota uma entidade, seja ela de
  natureza física, conceitual ou de software.
  Elementos como pessoas, organizações,
  máquinas, animais ou eventos podem ser
                                                   ica...
                                           Na prát
  considerados objetos.
O que é abstração?


  Abstração é considerada a habilidade de
 modelar características do mundo real do
problema que o programador esteja tentando
                 resolver.
Classificação e instanciação
● Classificar significa agrupar objetos com
  base em estruturas e comportamentos
  semelhantes;

● Instanciar objetos significa gerar novos
  exemplares a partir de uma descrição
  abstrata de um objeto genérico.
Classificação e instanciação




                                      ica...
                               Na prát
Agregação e composição
A ideia de agregação ou composição
estabelece a criação de novas classes de
objetos a partir da junção de classes já
existentes.
● Agregação: Quando unimos um conjunto de
   objetos para formarmos um novo objeto;
● Decomposição: Quando, analisando um
   objeto, isolamos cada um de seus
   componentes.
Agregação e composição




                                ica...
                         Na prát
Associação simples

    As entidades envolvidas apresentam
 existências independentes, mas existe uma
 ligação entre elas. A agregação não é única
  forma de relacionamento entre objetos e
                  classes.
Associação simples




                            ica...
                     Na prát
Encapsulamento


    Um dos aspectos mais positivos da
   programação modular foi a ideia de
    encapsulamento de informações.
Encapsulamento




                        ica...
                 Na prát
Generalização e especialização


Generalização e especialização são abstrações
 que permitem o reuso de objetos através da
  criação de classes de objetos a partir de
               outras classes.
Generalização e especialização




                                        ica...
                                 Na prát
Polimorfismo
   Um mesmo tipo de objeto, sob certas
condições, pode realizar ações diferentes ao
  receber uma mesma mensagem. Ou seja,
  objetos podem ter reações diferentes ao
             mesmo estímulo.
Polimorfismo




                      ica...
               Na prát
Modificadores de acesso
● public
  ○ Acessado por qualquer outro objeto
● private
  ○ Acessado somente na classe que o define
  ○ Padrão
● protected
  ○ Acessado na classe que o define e nas suas
  ○ classes herdadas
● internal
  ○ Acessado somente por objetos do mesmo assembly
Construtor
●   Mesmo nome da classe
●   Nenhum retorno
●   Parâmetros
●   Construtor vazio é padrão
    ○ Criado quando nenhum construtor é implementado
Construtor - Exemplo
public class Computador {
   public string monitor;
   public string teclado;
   public string mouse;

    Computador(string m, string t, string mo)
    {
       monitor = m;
       teclado = t;
       mouse = mo;
    }
}
Chamando o construtor
{ ...
Computador novo =
   new Computador(“LG”,”Microsoft”,”Mouse”);
... }

         está fazendo o mesmo que

Computador novo = new Computador();
novo.monitor = “LG”;
novo.teclado = ”Microsoft”;
novo.mouse = ”Mouse”;
Propriedades (ou atributos)
● Acesso customizado aos atributos
● Modifica a forma como dados são mostrados
  aos outros objetos
● Blocos:
  ○ get: Retornar informações do atributo
  ○ set: Modificar informações do atributo
Propriedades - Exemplo
class Computador {
    private string monitor;
    public string Monitor {
        get { return monitor; }
        set { monitor = value; }
    }
}
Métodos
● Similar às funções/procedimentos
● Assinatura do método
  ○ <modificador> <retorno> <nome>
    (<parametros>)
    {
        <código>
        return <retorno>; // Se não for void
    }
● Retorno dos métodos
  ○ void: Não retorna nada
  ○ <tipo específico>: Deve retornar um valor com o
    mesmo tipo definido na assinatura do método.
    Utilização da palavra chave “return”
Retorno dos métodos
Método void
   class Computador {
      public void HelloWorld() {
         Console.WriteLine(“Hello World”);
      }
   }
Método com retorno
   class Computador {
      public int Soma(int n1, int n2) {
         return n1 + n2;
      }
   }
Sobrecarga de métodos
● Métodos com mesmo nome e assinaturas
  diferentes
● Permite maior entendimento de código
● Cuidado com nomes de parâmetros.
  ○ Nomes diferentes mas tipos iguais não significa que
    são diferentes assinaturas
Sobrecarga de métodos
Exemplo simples
   public int Soma(int n1, int n2) {
       return n1 + n2;
   }
   public int Soma (int n1, int n2, int n3) {
       return n1 + n2 + n3
   }
Chamando outra versão do método:
   public int Soma(int n1, int n2) {
       return n1 + n2;
   }
   public int Soma (int n1, int n2, int n3) {
       return Soma (n1, Soma(n2,n3));
   }
Interfaces
●   Utiliza palavra chave interface
●   Não podem ser instanciadas
●   Apenas assinaturas
●   Modificador de acesso não é permitido

Uma interface para um Animal:
   public interface IAnimal {
        //propriedade Raca
        string Raca { get; set; }
        //método Respirar
        void Respirar();
   }
Implementando uma interface
●   Classes que implementam as interfaces devem implementar todos
    os seus membros
    ○ Se pelo menos um não estiver implementado, código não
        compilará
●   Utilização da estrutura: Classe : Interface
    ○ Exemplo: public class Cachorro : IAnimal
●   Herança múltipla é permitida para interfaces
●   Interfaces podem herdar de interfaces
●   No caso de uma classe herdar de outra e várias interfaces,
    separam-se por vírgulas. (Classe deve ser a primeira)
    ○ public class Cachorro : Animal, IComparable, ISerializable
Classes abstratas
● Não podem ser instânciadas
● Enquanto possuir membros abstratos a
  classe deve ser abstrata
● Classes incompletas
  ○ Contém implementações
  ○ Contém métodos abstratos
    ■ Métodos que devem ser implementados por
       classes filhas
● “Mistura” de classe e interface
Implementando classe abstrata
Classes abstratas x interfaces
Característica     Interface                                                Classe Abstrata

Herança múltipla   Uma classe pode implementar diversas interfaces          Uma classe pode herdar somente uma classe

Implementação      Uma interface não pode conter qualquer tipo de código,   Uma classe abstrata pode fornecer código completo
Padrão             muito menos código padrão.                               , código padrão ou ter apenas a declaração de seu
                                                                            esqueleto para ser posteriormente sobrescrita.

Constantes         Suporte somente constantes do tipo estática.             Pode conter constantes estáticas e de instância.

Componentes de     Uma implementação de uma interface pode ser incluída     Uma classe de terceiros precisa ser reescrita para
terceiros          a qualquer classe de terceiros.                          estender somente a partir da classe abstrata.

Homogeneidade      Se todas as diversas implementações compartilham a       Se as várias implementações são todas do tipo e
                   assinatura do método então a interface funciona          compartilham um comportamento e status comum ,
                   melhor.                                                  então a classe abstrata funciona melhor.

Manutenção         Se o código do seu cliente conversa somente em termos    idêntico
                   de uma interface, você pode facilmente alterar a
                   implementação concreta usando um método factory.

Velocidade         Lento , requer trabalho extra para encontrar o método    Rápido
                   correspondente na classe atual.

Clareza            Todas as declarações de constantes em uma interface      Você pode por código compartilhado em uma classe
                   são presumidamente publicas ou estáticas.                abstrata. Você pode usar código para computar o
                                                                            valor inicial de suas constantes e variáveis de
                                                                            instância ou estáticas.

Funcionalidades    Se você incluir um novo método em uma interface você     Se você incluir um novo método em uma classe
Adicionais         precisa ajustar todas as implementações da interface.    abstrata você tem a opção de fornecer uma
                                                                            implementação padrão para ele.
Dúvidas

Curso de OO com C# - Parte 01 - Orientação a objetos

  • 1.
    Orientação a objetos Leonardo Melo Santos http://about.me/leonardomelosantos
  • 2.
    Conteúdo programático ● Introdução ○ Evolução das linguagens de programação ○ Paradigmas de programação ● Orientação a objetos ○ Conceitos ○ Diagramas ○ Modificadores de acesso ○ Construtores ○ Propriedades
  • 3.
    Evolução das linguagensde programação Linguagem de máquina e linguagem montadora ● Muitos comandos para fazer alto simples; ● Exigência de muito conhecimento; ● Códigos não tão legíveis; Linguagens de alto nível ● Popularização do uso dos computadores; ● Códigos mais amigáveis devido à complexidade dos problemas;
  • 4.
    Paradigmas de programação 1)Paradigma imperativo ● Código mais amigágel que linguagens montadoras; ● Código sequencial; 2) Paradigma procedural ● Paradigma imperativo mas com o uso de subrotinas (funções e procedimentos);
  • 5.
    Paradigmas de programação 3)Programação Modular e Estruturada ● Surgiu com a demanda de grandes projetos; ● Agrupamento de código-fonte através de módulos; ● Mais facilidade na manutenção do código- fonte;
  • 6.
    Paradigmas de programação 4)Paradigma orientado a objetos ● O problema é partido em vários pedaços, a ponto de definirmos objetos/entidades; ● Visa aproximar a maneira como construímos os programas com o mundo real;
  • 7.
  • 8.
    Conceitos ● Classe eObjeto ● Abstração ○ Classificação/Instanciação; ○ Agregação/Composição; ○ Associações simples; ○ Encapsulamento; ○ Generalização/Especialização; ○ Polimorfismo;
  • 9.
    O que éclasse e o que é objeto? ● Uma classe é a descrição de um grupo de objetos com propriedades (atributos), comportamentos (métodos), e relacionamentos com outros objetos (associações e agregações); ● Objeto: Denota uma entidade, seja ela de natureza física, conceitual ou de software. Elementos como pessoas, organizações, máquinas, animais ou eventos podem ser ica... Na prát considerados objetos.
  • 10.
    O que éabstração? Abstração é considerada a habilidade de modelar características do mundo real do problema que o programador esteja tentando resolver.
  • 11.
    Classificação e instanciação ●Classificar significa agrupar objetos com base em estruturas e comportamentos semelhantes; ● Instanciar objetos significa gerar novos exemplares a partir de uma descrição abstrata de um objeto genérico.
  • 12.
  • 13.
    Agregação e composição Aideia de agregação ou composição estabelece a criação de novas classes de objetos a partir da junção de classes já existentes. ● Agregação: Quando unimos um conjunto de objetos para formarmos um novo objeto; ● Decomposição: Quando, analisando um objeto, isolamos cada um de seus componentes.
  • 14.
  • 15.
    Associação simples As entidades envolvidas apresentam existências independentes, mas existe uma ligação entre elas. A agregação não é única forma de relacionamento entre objetos e classes.
  • 16.
    Associação simples ica... Na prát
  • 17.
    Encapsulamento Um dos aspectos mais positivos da programação modular foi a ideia de encapsulamento de informações.
  • 18.
    Encapsulamento ica... Na prát
  • 19.
    Generalização e especialização Generalizaçãoe especialização são abstrações que permitem o reuso de objetos através da criação de classes de objetos a partir de outras classes.
  • 20.
  • 21.
    Polimorfismo Um mesmo tipo de objeto, sob certas condições, pode realizar ações diferentes ao receber uma mesma mensagem. Ou seja, objetos podem ter reações diferentes ao mesmo estímulo.
  • 22.
    Polimorfismo ica... Na prát
  • 23.
    Modificadores de acesso ●public ○ Acessado por qualquer outro objeto ● private ○ Acessado somente na classe que o define ○ Padrão ● protected ○ Acessado na classe que o define e nas suas ○ classes herdadas ● internal ○ Acessado somente por objetos do mesmo assembly
  • 24.
    Construtor ● Mesmo nome da classe ● Nenhum retorno ● Parâmetros ● Construtor vazio é padrão ○ Criado quando nenhum construtor é implementado
  • 25.
    Construtor - Exemplo publicclass Computador { public string monitor; public string teclado; public string mouse; Computador(string m, string t, string mo) { monitor = m; teclado = t; mouse = mo; } }
  • 26.
    Chamando o construtor {... Computador novo = new Computador(“LG”,”Microsoft”,”Mouse”); ... } está fazendo o mesmo que Computador novo = new Computador(); novo.monitor = “LG”; novo.teclado = ”Microsoft”; novo.mouse = ”Mouse”;
  • 27.
    Propriedades (ou atributos) ●Acesso customizado aos atributos ● Modifica a forma como dados são mostrados aos outros objetos ● Blocos: ○ get: Retornar informações do atributo ○ set: Modificar informações do atributo
  • 28.
    Propriedades - Exemplo classComputador { private string monitor; public string Monitor { get { return monitor; } set { monitor = value; } } }
  • 29.
    Métodos ● Similar àsfunções/procedimentos ● Assinatura do método ○ <modificador> <retorno> <nome> (<parametros>) { <código> return <retorno>; // Se não for void } ● Retorno dos métodos ○ void: Não retorna nada ○ <tipo específico>: Deve retornar um valor com o mesmo tipo definido na assinatura do método. Utilização da palavra chave “return”
  • 30.
    Retorno dos métodos Métodovoid class Computador { public void HelloWorld() { Console.WriteLine(“Hello World”); } } Método com retorno class Computador { public int Soma(int n1, int n2) { return n1 + n2; } }
  • 31.
    Sobrecarga de métodos ●Métodos com mesmo nome e assinaturas diferentes ● Permite maior entendimento de código ● Cuidado com nomes de parâmetros. ○ Nomes diferentes mas tipos iguais não significa que são diferentes assinaturas
  • 32.
    Sobrecarga de métodos Exemplosimples public int Soma(int n1, int n2) { return n1 + n2; } public int Soma (int n1, int n2, int n3) { return n1 + n2 + n3 } Chamando outra versão do método: public int Soma(int n1, int n2) { return n1 + n2; } public int Soma (int n1, int n2, int n3) { return Soma (n1, Soma(n2,n3)); }
  • 33.
    Interfaces ● Utiliza palavra chave interface ● Não podem ser instanciadas ● Apenas assinaturas ● Modificador de acesso não é permitido Uma interface para um Animal: public interface IAnimal { //propriedade Raca string Raca { get; set; } //método Respirar void Respirar(); }
  • 34.
    Implementando uma interface ● Classes que implementam as interfaces devem implementar todos os seus membros ○ Se pelo menos um não estiver implementado, código não compilará ● Utilização da estrutura: Classe : Interface ○ Exemplo: public class Cachorro : IAnimal ● Herança múltipla é permitida para interfaces ● Interfaces podem herdar de interfaces ● No caso de uma classe herdar de outra e várias interfaces, separam-se por vírgulas. (Classe deve ser a primeira) ○ public class Cachorro : Animal, IComparable, ISerializable
  • 35.
    Classes abstratas ● Nãopodem ser instânciadas ● Enquanto possuir membros abstratos a classe deve ser abstrata ● Classes incompletas ○ Contém implementações ○ Contém métodos abstratos ■ Métodos que devem ser implementados por classes filhas ● “Mistura” de classe e interface
  • 36.
  • 37.
    Classes abstratas xinterfaces Característica Interface Classe Abstrata Herança múltipla Uma classe pode implementar diversas interfaces Uma classe pode herdar somente uma classe Implementação Uma interface não pode conter qualquer tipo de código, Uma classe abstrata pode fornecer código completo Padrão muito menos código padrão. , código padrão ou ter apenas a declaração de seu esqueleto para ser posteriormente sobrescrita. Constantes Suporte somente constantes do tipo estática. Pode conter constantes estáticas e de instância. Componentes de Uma implementação de uma interface pode ser incluída Uma classe de terceiros precisa ser reescrita para terceiros a qualquer classe de terceiros. estender somente a partir da classe abstrata. Homogeneidade Se todas as diversas implementações compartilham a Se as várias implementações são todas do tipo e assinatura do método então a interface funciona compartilham um comportamento e status comum , melhor. então a classe abstrata funciona melhor. Manutenção Se o código do seu cliente conversa somente em termos idêntico de uma interface, você pode facilmente alterar a implementação concreta usando um método factory. Velocidade Lento , requer trabalho extra para encontrar o método Rápido correspondente na classe atual. Clareza Todas as declarações de constantes em uma interface Você pode por código compartilhado em uma classe são presumidamente publicas ou estáticas. abstrata. Você pode usar código para computar o valor inicial de suas constantes e variáveis de instância ou estáticas. Funcionalidades Se você incluir um novo método em uma interface você Se você incluir um novo método em uma classe Adicionais precisa ajustar todas as implementações da interface. abstrata você tem a opção de fornecer uma implementação padrão para ele.
  • 38.