Curso de OO com C# - Parte 01 - Orientação a objetos
O documento discute os conceitos fundamentais de orientação a objetos, incluindo classes, objetos, encapsulamento, herança, polimorfismo, modificadores de acesso e construtores. Também aborda diagramas, propriedades, métodos e interfaces.
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;
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.
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.
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.
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.
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.
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
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.