Programação orientada a objetos
FUNDAMENTAÇÃO
DE PROGRAMAÇÃO
Linguagem de Programação
• Objetivo: Demonstrar os conceitos iniciais
de programação orientada a objeto
encapsulamento e polimorfismo a partir do
ambiente Visual Studio, utilizando a
Programação orientada a objetos
• Encapsulamento:
• A utilização de objetos possibilita que um objeto seja usado, mesmo que não se conheçam todos os seus atributos ou métodos. Desta forma, é
possível desenvolver bibliotecas(namespaces) de classes e objetos que possam ser utilizadas por terceiros. Imagine, por exemplo, uma namespace que trate recursos de impressão com código de barras em que não é necessário saber como as classes e objetos foram definidos e quais são os atributos. Apenas é necessário saber como eles funcionam, como são os seus métodos.
Programação orientada a objetos
• Encapsulamento:
– O conceito de encapsulamento decorre da
necessidade de esconder recursos que não são de interesse ao usuário. Proporciona estabelecer o conjunto de recursos que podem ser visíveis ou invisíveis, os quais são definidos pelos
qualificadores public, private, internal,
Programação orientada a objetos
• Encapsulamento:
– Ao desenvolver um objeto, pode-se especificar que é possível ter o acesso que se deseja. Por esta obra ser um estudo inicial da linguagem C#, estão sendo apresentados os qualificadores
public e private, ficando os demais a serem
vistos em outro trabalho de cunho mais
avançado. Assim sendo, considere o descrito a seguir:
Programação orientada a objetos
• Encapsulamento:
–>
Pode-se definir acesso total a todos os seus recursos (atributos e métodos), que são qualificados pelo tipo public.–>
Pode-se definir recursos que somente sejam acessados por intermédio de um método existente na própria classe, que são aqueles com qualificador do tipo private.Exemplo:
Copiar o projeto
CalculoMediaAprovação na pasta
compartilhada Programação
Orientada a objetos para o seu
respectivo computador e abrir no
Visual Studio 2013.
Programação orientada a objetos
• Encapsulamento:
– O programa seguinte apresenta o qualificador
private no estabelecimento de um atributo
Programação orientada a objetos
Programação orientada a objetos
• Encapsulamento:
• Observe no código do programa em que se
encontra a classe CadAluno a proposta de três atributos públicos, sendo NOME do tipo string e N1 e N2 do tipo float. Note o uso antes dos
atributos NOME, N1 e N2 do qualificador public. No entanto, observe o atributo MEDIA do tipo
float como sendo private. Neste caso, o atributo MEDIA é privado e somente pode ser usado
dentro da classe CadAluno, ou seja, o atributo MEDIA não possui visibilidade externa, pois está encapsulado.
Programação orientada a objetos
Programação orientada a objetos
• Encapsulamento:
• Os métodos CalcMedia() para o cálculo da média e CondAluno() para a verificação da condição de aprovação do aluno.
• No método CalcMedia() estão os parâmetros NT1 e NT2 que fornecem para o método os valores
das notas apresentadas. Internamente o método CalcMedia() utiliza o atributo MEDIA para calcular e dar retorno do valor da média calculada de
forma pública. O resultado da média é transferido pelo método CalcMedia() e não pelo atributo
Programação orientada a objetos
• Polimorfismo:
• O termo polimorfismo é urna variação em português do termo análogo em inglês
polymorphic, que é a contração das palavras
poly (muitos) e morphic (formas), ou seja, muitas formas. Na programação orientada a objetos,
polimorfismo é a capacidade que um método de um objeto possui de assumir formas diferentes para a sua execução.
Programação orientada a objetos
• Polimorfismo:
• Polimorfismo é a capacidade de escrever
métodos que se comportem corretamente para objetos de tipos diferentes (JANSA, 1995), ou seja, é a capacidade de estabelecer uma única interface para vários métodos membro.
Programação orientada a objetos
• Polimorfismo:
– O uso de polimorfismo pode ocorrer numa
linguagem orientada a objetos de quatro formas diferentes, mas nem toda a linguagem de
programação orientada a objetos opera todas as formas de polimorfismo. Assim sendo considere os modos de:
• >
polimorfismo universal paramétrica;• >
polimorfismo universal de inclusão;• >
polimorfismo ad hoc (lê-se adóqui, em latim paraisto ou temporariamente para esta finalidade) de
sobrecarga;
Programação orientada a objetos
• Polimorfismo universal paramétrico :
• O polimorfismo universal paramétrico é a
forma de polimorfismo considerada verdadeira. Ocorre quando estruturas preestabelecidas
(cenários ou contextos) de operação são utilizadas. Cada cenário possui uma ação
preestabelecida. Assim sendo, um objeto pode ser usado harmoniosamente em diferentes
cenários sem a necessidade de ser efetivamente modificado.
Programação orientada a objetos
• Polimorfismo universal paramétrico :
• O polimorfismo universal de inclusão ocorre quando um recurso de uma classe-filho
instancia um recurso sobre a classe-pai, sendo esta a forma mais simples de construção
polimórfica, pois a classe-pai herda algum recurso advindo da classe-filho.
Programação orientada a objetos
• Polimorfismo ad hoc de sobrecarga :
• O polimorfismo ad hoc de sobrecarga
acontece quando são usados vários métodos com o mesmo nome de identificação, mas possuindo número de parâmetros diferentes. Esta é a forma de polimorfismo mais simples, comum e será também apresentada a seguir.
Programação orientada a objetos
• Polimorfismo ad hoc de coerção :
• O polimorfismo ad hoc de coerção se apresenta quando se usam os recursos de
conversões de tipos de dados de uma variável em outro tipo de dado a fim de efetuar uma
operação em um método, evitando um erro de tipo, permitindo assim, por exemplo, tratar uma variável de tipo inteiro como se fosse de tipo
Programação orientada a objetos
• Polimorfismo:
• Melhor que descrever é demonstrar o uso das formas de polimorfismo. Atente para os
próximos três exemplos que demonstram as formas de polimorfismo: universal paramétrica, universal de inclusão e ad hoc de sobrecarga. • O polimorfismo ad hoc de coerção foi usado no
conceitos de métodos que comentou o uso de métodos para a conversão de tipos.
Programação orientada a objetos
• Polimorfismo universal paramétrica :
• O primeiro exemplo mostra o polimorfismo
universal paramétrica. Considere um programa que deve efetuar a entrada de valores num
arranjo em que não se conhece de antemão o número de elementos a serem inseridos. Além de mostrar uma ação polimórfica, também
Exemplo:
Copiar o projeto ListaNumero na
pasta compartilhada Programação
Orientada a objetos para o seu
respectivo computador e abrir no
Visual Studio 2013.
Programação orientada a objetos
• Polimorfismo universal paramétrica :
– O efeito de aplicação da operação de
polimorfismo universal paramétrica ocorre coma instrução:
List<Object> LISTA
=
new List<Object>();– A classe List usa a classe Object para definir um objeto LISTA, o qual é instanciado a partir da classe List<Object> por meio da cláusula
new. O uso dos parênteses após a classe List<Object> diz ao compilador que não é
conhecido o número de elementos do arranjo, ou seja, é um arranjo do tipo dinâmico, cujo número de elementos a ser armazenado será controlado pelo programa.
Programação orientada a objetos
• Polimorfismo universal paramétrica :
– O efeito de polimorfismo universal paramétricaocorre com a classe Object definida para a classe
List. Perceba que a classe Object pode operar
com qualquer tipo de dado. No programa foi
escolhido operar com dados string para a variável N. Se for modificado o tipo da variável N para int,
float ou qualquer outro tipo, a lista de objetos
continua operando sem modificar a classe Object para outra. Neste ponto ocorre uma ação
polimórfica, pois o objeto LISTA pode assumir
qualquer tipo de dado, desde que seja previamente avisado, pois a Object é uma classe genérica da linguagem C#.
Programação orientada a objetos
• Polimorfismo universal paramétrica :
• Assim que o objeto LISTA está definido e
instanciado, é possível efetuar o gerenciamento da lista. O método Add() permite a entrada de dados na lista. A propriedade Count captura o número de elementos existentes na lista.
Programação orientada a objetos
Programação orientada a objetos
• Polimorfismo universal de inclusão:
• O exemplo a seguir vai demonstrar o
polimorfismo universal de inclusão. Considere um programa que execute um método da
classe-Pai e depois um método da classe-filho, ambos com o mesmo nome. Após a execução dos métodos de cada classe far-se-á a
sobreposição do método da classe-filho ao método da pai, de forma que a classe-pai perca acesso ao seu próprio método e
assuma para execução o método da classe-filho.
Exemplo:
Copiar o projeto ClassePaiFilho na
pasta compartilhada Programação
Orientada a objetos para o seu
respectivo computador e abrir no
Visual Studio 2013.
Programação orientada a objetos
• Polimorfismo universal de inclusão:
• Para conseguir o efeito de polimorfismo universal de inclusão de modo que uma classe-pai assuma
recursos da classe-filho, é necessário que o recurso a ser sobreposto esteja na classe-pai como virtual. Daí a instrução de declaração do método da classe-pai public virtual void Executa(). Raciocínio semelhante deve ser considerado no recurso com mesmo nome na classe-filho. O recurso da classe-filho deve ser
declarado com a capacidade de fazer sobreposição a um recurso virtual da classe-pai. Daí o fato de a
instrução de declaração do método da classe-filho ser public override void Executa(). O método
override(sobreposição) será sobreposto ao método de mesmo nome indicado como virtual.
Programação orientada a objetos
• Polimorfismo universal de inclusão:
– No programa observe duas classes. A classe ClassePai e a classe ClasseFilho, ambas
possuindo um método com mesmo nome, neste caso, método Executa().
– A classe-pai possui no seu método Executa() a capacidade de apresentar a mensagem Ação na classe-pai. Na classe-filho também há um
método chamado Executa() que apresenta a mensagem Ação na classe filho. Ambas as
classes possuem um método com mesmo nome, mas que resultam ações diferentes.
Programação orientada a objetos
• Polimorfismo universal de inclusão:
– Na sequência encontra-se o objeto PAI sendo atribuído pelo objeto FILHO por meio da
instrução PAI = FILHO;
– O método Executa() da classe-filho torna-se
sobreposto ao método Executa() da classe-pai. Quando isso ocorre, o objeto PAI assume para ele o método Executa() existente no objeto
FILHO, perdendo acesso ao seu próprio método. Esse efeito parece de herança, mas ocorre em sentido contrário.
Programação orientada a objetos
• Polimorfismo ad hoc de sobrecarga :
– O exemplo a seguir mostra o polimorfismo ad
hoc de sobrecarga. Considere um programa que
forneça como resposta a área de algumas figuras geométricas. Esse programa esta configurado por dois trecho de códigos distintos, as classes e a
Exemplo:
Copiar o projeto CalculoDeArea na
pasta compartilhada Programação
Orientada a objetos para o seu
respectivo computador e abrir no
Visual Studio 2013.
Programação orientada a objetos
Classe que faz o calculo dasÁreas:
De um cilindro, de um retângulo e um cubo.
Classe Principal:
Onde e executado a rotina do programa.
Programação orientada a objetos
• Polimorfismo ad hoc de sobrecarga :
– Os métodos Area() da classe CalcArea
apresentam apenas o qualificador public. Para os casos em que os métodos serão sobrepostos via polimorfismo ad hoc de sobrecarga, os métodos não podem ser estáticos. Não se usa a cláusula static como ocorreu em outros exemplos.
Programação orientada a objetos
• Polimorfismo ad hoc de sobrecarga :
– No código da classe CalcArea observe os três métodos diferentes com o mesmo nome: Area(). Cada método trata de uma forma diferente (mais de uma forma, é polifórmico) de parâmetro e
assim está capacitado a realizar uma tarefa diferente da outra. Quando da execução do programa, a seleção do método a ser usado
ocorre automaticamente e essa decisão depende do número de parâmetros em uso no momento da chamada do método.
Exercícios
Exercícios
1º - Programar no C# utilizando o conceito de Polimorfismo com sobrecarga de métodos um programa que realize a soma de 2, 3, 4 e 5
números. Exemplo:
2+3; 5+6+7; 8+5+4+1; 10+4+11+2+7;
A sobrecarga de métodos é um conceito onde
usamos o mesmo nome do método muitas vezes na mesma classe, mas cada método com
parâmetros diferentes. Com base nos parâmetros passados a execução é decidida em tempo de
compilação.
Exercícios
2º - Programar no C# utilizando o conceito de Polimorfismo universal de inclusão para o
seguinte problema:
• Imagine uma classe veículo que define os
comportamentos e atributos de qualquer veículo e não apenas de carros.
Exercícios
• Uma característica básica de qualquer veículo é o movimento logo nossa classe veículo pode
expressar isso através de um método Mover(). • Outra característica básica de qualquer veículo
seria poder parar afinal nenhum veículo fica
eternamente em movimento e isso seria expresso na classe veículo por um método Para().
• Então podemos criar uma classe Veiculo contendo esses métodos e usar o mecanismo da herança
para que outras classes herdem os atributos e comportamentos(métodos) comuns.