Buscar

Introdução à Programação Orientada a Objetos

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 35 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 35 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 35 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Classes: Parte I
ECA104 – Aula 02
Prof. João Paulo R. R. Leite
joaopaulo@unifei.edu.br
Universidade Federal de Itajubá
Programação Orientada a Objetos
• Linguagens OO surgiram entre o final dos anos 
70 e começo dos anos 80 e se popularizaram 
rapidamente (Ex: C++, Java, C#!)
• A orientação a objetos não é apenas uma • A orientação a objetos não é apenas uma 
nova maneira de programar.
– Ela nos provê com um modelo de programação 
que torna natural a utilização de conceitos do 
mundo real, facilitando a tradução de um 
problema para o domínio computacional.
Programação Orientada a Objetos
• Linguagens de programação procedurais são 
voltadas para a criação e chamadas de 
procedimentos, ou funções, que agregavam 
novas funcionalidades ao programa principal.
– Podemos dizer que ela é baseada em ações ou 
verbos (faça isso, faça aquilo).
– Exemplos: C, FORTRAN, COBOL, ALGOL, etc.
• Força o desenvolvedor a pensar mais em 
termos computacionais do que em termos 
naturais da aplicação.
Programação Orientada a Objetos
• Programas que utilizam OOP são formados 
por também por fragmentos de programas 
estruturados, mas possuem seu foco voltado 
para a definição de classes ou tipos definidos 
pelo usuário (substantivos).pelo usuário (substantivos).
– Ao traduzir um problema real para um modelo 
orientado a objetos, podemos transpor cada um 
de seus componentes para uma classe, que 
modela suas características, comportamentos e 
relacionamentos com objetos de outras classes.
Programação Orientada a Objetos
• Classe � Classificação (Termo base)
– Processo integrado em nossa maneira de pensar.
– Agrupamos, naturalmente em nossa mente, objetos 
com comportamentos e características semelhantes 
em “categorias” (ou “classes”!).em “categorias” (ou “classes”!).
• Coletar informação sobre categorias é essencial para nossa
sobrevivência. Nós nos deparamos a todo momento com 
coisas novas e, se não fossemos capazes de aprender e dar
palpites, nós não seríamos capazes de sobreviver.
– Quando você vê um objeto e o categoriza como “cadeira”, 
reconhece que provavelmetne você pode se sentar nela!
– Quando você vê um animal e o categoriza como “T-Rex”, é 
melhor você ficar imóvel!
Programação Orientada a Objetos
• Programação Orientada a Objetos consiste em:
1. Identificar as entidades (ou classes de objetos) 
presentes em um problema, analisar que tipo de 
informação elas precisam conter e quais tarefas informação elas precisam conter e quais tarefas 
precisam realizar;
2. E representá-las através de classes em uma 
linguagem de programação de alto nível.
– Uma entidade pode representar tanto um item concreto, 
como um “Carro” ou “Cliente”, quanto um item mais 
abstrato como “Transação” ou “Reunião”.
Programação Orientada a Objetos
• Mas então o que, afinal, são as classes?
• Elas definem um conjunto de dados (atributos, 
características) e funções/métodos 
(comportamentos) que são comuns a uma classe 
de objetos pertencente ao universo do problema.de objetos pertencente ao universo do problema.
• Através das classes, é possível gerar inúmeros 
objetos com características semelhantes, da 
mesma maneira que um construtor é capaz de 
construir várias casas semelhantes a partir de 
uma única planta.
A partir de uma definição de classe 
– de uma “planta”, é possível 
construir quantos objetos forem 
necessários – “casas”.
As casas compartilham 
características, mas 
são independentes. A 
mudança em uma não 
influencia nas outras.
Programação Orientada a Objetos
• Mas então classe e objeto são coisas diferentes?
• Exemplo:
– Imagine que estejamos interessados em modelar 
computacionalmente um sistema real que envolva 
carros. A criação de um tipo “Carro” seria carros. A criação de um tipo “Carro” seria 
imprescindível e teria atributos como “potência”, 
“cor”, “comprimento”, etc., além de comportamentos 
como “acelerar”, “frear”, etc.
– A definição da classe nos dá, portanto, uma lista das 
características comuns a todos os carros e a 
especificação de todos os seus comportamentos.
Programação Orientada a Objetos
• Exemplo:
– Agora imagine que seja necessário criar durante o 
programa “instâncias” destas classes.
• Um Celta prateado, com 75cv;
• Uma Ferrari vermelha, com 520cv.• Uma Ferrari vermelha, com 520cv.
– O programa utiliza uma classe (Carro) para criar dois 
objetos (celta1000 e ferrariF50) diferentes e 
independentes, que possuem características próprias 
e preenchem com valores a lista de atributos definida 
pela classe.
• Imaginando que a aceleração seja uma função apenas da 
potência, os dois carros acelerariam da mesma maneira?
Hands-On!
Criando uma classe no Visual Studio
1. Crie um projeto 
2. Clique sobre o ícone do projeto no “Solution Explorer” e 
escolha o item “Add > Class”
Hands-On!
Criando uma classe no Visual Studio
3. Na tela que irá aparecer, digite um nome para a sua classe e pressione o 
botão “Add”. Usualmente, cada palavra do nome da classe inicia-se com 
letra maiúscula, e os demais caracteres são minúsculos.
Ex: Circulo, FiguraGeometrica, ArvoreBinaria
4. Um novo arquivo será criado em seu projeto com a extensão “.cs” e o 
nome da sua classe.nome da sua classe.
O código básico para sua classe é 
criado automaticamente
• Declaração de namespaces
• Nome da classe
Hands-On!
Criando uma classe no Visual Studio
5. Agora, adicionamos atributos e métodos à classe:
Alguns pontos devem ser 
ressaltados:
1. Construtor?
2. Public e Private?
3. this?
• A declaração de objetos no decorrer do programa é realizada 
de maneira semelhante às variáveis de tipos primitivos (int, 
double, etc.).
• O objeto precisa ser alocado na memória: Para criar uma 
instância do objeto, chamamos o construtor da classe através 
da palavra reservada new.
Programação Orientada a Objetos
da palavra reservada new.
• Atributos e métodos da classe são acessados através de um 
handle (o ponto!), como em outroCirculo.calculaArea().
• O construtor é um método que possui o mesmo nome 
da classe, e precisa ser chamado sempre que o programa 
instancia um objeto daquele tipo (new).
• Através dele é possível inicializar os membros de dados, 
por exemplo, ou realizar tarefas de configuração inicial
da classe (posX = posY = 0).
Construtores
da classe (posX = posY = 0).
• Sua sintaxe é semelhante a um método comum, mas não 
possui um tipo de retorno. Uma classe pode ter quantos 
construtores forem necessários: Todos terão o mesmo 
nome, mas uma lista diferente de parâmetros.
• Caso não seja explicitamente criado pelo programador, 
um construtor padrão (vazio) é gerado pelo próprio 
compilador.
• Exemplos:
Construtores
A palavra reservada “this” faz 
referência à instância atual da 
classe, ou seja, ao objeto que 
está chamando o método.
Se o Círculo de raio 10 chamar o 
método calculaArea(), dentro 
deste método, this.raio será igual 
a 10.
Em vários contextos (como no 
exemplo ao lado), o seu uso é 
opcional e serve apenas para 
aumentar a clareza do código.
• Atributos e métodos são análogos às variáveis e 
funções, aprendidos no curso de programação em C.
• Para declarar um atributo:
especificadorAcesso tipoAtributo nomeAtributo;
Ex: 
Atributos e Métodos
– private int altura;
– public Circulo circuloInterno;
• Para declarar e implementar um método:
especificadorAcesso tipoRetorno nomeAtributo(parametros) {...}
Ex:
– public Circulo createCirculo(double raio, int x, int y) { ... }
– public void setRaio(double raio) { ... }
– private int getInternalResults() { ... }
Visibilidade de Membros
• Atributos e métodos de uma classe pertencem 
ao escopo da classe.
– Dentro da classe, estes membros podem ser 
acessados livremente de maneira direta ou 
através da referência this.através da referência this.
• Outras classes, incluindo as que você mesmo 
implementou e que estão no mesmo projeto, 
necessitam de permissão para acessar seus 
itens, portanto, é necessário criar uma regra 
de acesso para cada atributo e método.Visibilidade de Membros
• O acesso a membros da classe é definido 
através de palavras-chave conhecidas como 
especificadores de acesso. São eles:
– private (Privado);– private (Privado);
– public (Público);
– Default (Padrão)
• Utilizado quando o programados não especifica o 
controlador de acesso, é sinônimo de private em C#.
Visibilidade de Membros
• Private: Podem ser acessados somente por 
funções membro da mesma classe. 
– O acesso externo é feito através de métodos que 
formam a interface pública da classe (ex: set/get).formam a interface pública da classe (ex: set/get).
– Métodos que façam trabalho interno.
• Public: Podem ser acessados por qualquer 
classe do programa, bastando que se faça 
referência ao namespace, caso esteja em 
outro.
• Repare que o IntelliSense somente mostra os itens 
públicos da classe, que são calculaArea e setRaio. Os 
atributos privados não são exibidos, pois seu acesso 
está restrito somente ao escopo da classe. 
Visibilidade de Membros
Mas pra que restringir?
Encapsulamento
• Um dos mais importantes conceitos de 
orientação a objeto.
• Possui dois objetivos básicos:
– Organização: Reunir em uma única estrutura – a – Organização: Reunir em uma única estrutura – a 
classe, dados e comportamentos comuns a uma 
categoria de objetos;
– Privacidade: Controlar a utilização da classe, 
ocultando detalhes de sua implementação e 
provendo uma interface pública clara e sucinta, 
que supra as necessidades do usuário.
Encapsulamento
• Objetos comunicam-se e interagem uns com os 
outros através de interfaces públicas bem 
definidas, não sendo normalmente permitido 
que um conheçam a implementação do outro.
• Como isso é possível?• Como isso é possível?
• É perfeitamente possível dirigir um carro sem 
conhecer completamente sua mecânica. 
Utilizamos uma interface pública que mascara 
sua implementação através de dispositivos 
simples como pedais e volante.
Encapsulamento
• E para que serve?
• O encapsulamento dos métodos torna muito 
mais simples a manutenção de sistemas e 
reutilização de software.
– Ao modificar a implementação de um método, ou – Ao modificar a implementação de um método, ou 
acrescentar alguma otimização no código, não é 
necessário modificar sua interface.
– Usuário da classe não precisa modificar uma linha de 
código sequer. A chamada permanece igual.
• Mantém em segredo a implementação, caso seja 
estratégico para o desenvolvedor.
Namespaces
• Ajudam a organizar e manter o projeto, além de 
facilitar a reutilização de software.
– Organização do código;
– Evitam conflitos entre nomes de classes, oferecendo 
convenção para nomes de classes únicos:convenção para nomes de classes únicos:
• Exemplo: PrimeiroPrograma.NomeClasse
Empresa.Projeto.NomeClasse
• Caso uma classe esteja em um namespace e deseje 
utilizar uma classe em outro namespace, é necessário 
declarar a intenção de uso no início do programa:
– using Unifei.Tetris;
– using Eca.CandyCrush;
Hands-On!
Utilizando a classe criada no Programa Principal
Métodos e Atributos static
• Repare na assinatura do método main: 
• O que a palavra reservada static representa?
• Em C#, todos os métodos precisam ser declarados 
dentro de classes.
• No entanto, caso você declare um método como static, • No entanto, caso você declare um método como static, 
ele poderá ser chamado sem que haja uma instância 
daquela classe – sem que haja um objeto.
• Normalmente são métodos que provêem alguma 
utilidade independente, que não necessite acessar 
atributos de uma instância.
• Não é permitido o acesso a atributos e métodos de 
instância (non-static) dentro de um método static.
Métodos e Atributos static
• A classe Math, do namespace System, provê uma 
grande quantidade de métodos estáticos, que são 
muito úteis para a realização de cálculos: Pow(), Sqrt(), 
Min(), Max(), Sin, Cos(), etc.
• Como fazer a chamada? NomeClasse.NomeMetodo()• Como fazer a chamada? NomeClasse.NomeMetodo()
Ex: Math.Pow(10, 2);
Math.Sqrt(100); // sem instância da classe
• Como seria feita se não fosse métodos estáticos?
Ex: 
Math m = new Math(); // instância da classe
m.Pow(10,2);
m.Sqrt(100);
Métodos e Atributos static
• Imagine que você queira prover um método estático para sua 
classe Circulo, que devolva a área de um círculo qualquer.
• Não é possível acessar o atributo raio, pois não haverá 
instância da classe Circulo;
• Faça com que o método receba o raio como parâmetro:
• Para utilizar o método estático em outra parte do programa, 
simplesmente chame o método diretamente da classe (sem 
instância de objeto), passando o valor de raio como 
parâmetro:
Métodos e Atributos static
• E porque o método main precisa ser estático?
– Para que possa ser invocado pela CLR sem que ela
precise criar uma instância da sua classe principal.
• Program.Main();
• Existem também atributos estáticos?• Existem também atributos estáticos?
– Sim! Esses atributos criam campos que são
compartilhados entre todas as instâncias daquela
classe – tantas quantas forem criadas.
– Todos os objetos daquela classe acessam o 
mesmo atributo, seja para modifica-lo ou apenas
para lê-lo.
Métodos e Atributos static
• Imagine que gostaríamos de manter um registro com a 
quantidade de objetos do tipo Circulo criados.
– Devemos criar um atributo público estático do tipo inteiro, 
inicializa-lo com 0 e incrementá-lo sempre que o 
construtor for chamado:
Métodos e Atributos static
• Escreva um programa que simula o comportamento de 
um robô de reconhecimento em um planeta distante. 
– O planeta está dividido em uma superfície quadrada de 20 
por 20 quadrantes, onde o robô se move um quadrante
por vez e guarda sua posição.
Hands-On!
Criando um sistema do zero
por vez e guarda sua posição.
– A missão é mover-se sobre a superficie e coletar rochas, 
que podem estar ou não presentes naquele quadrante
(Random).
– O planeta precisa ser inicializado com algumas rochas
(50?) e, a cada movimento do robô, precisa ser exibido na
tela.
– Ao passar sobre uma rocha, o robô a coleta e incrementa
um contador de rochas. A rocha então some do quadrante.
• Escreva um programa que simula o comportamento de 
um robô de reconhecimento em um planeta distante. 
– O planeta está dividido em uma superfície quadrada de 20 
por 20 quadrantes, onde o robô se move um quadrante
por vez e guarda sua posição.
Hands-On!
Criando um sistema do zero
por vez e guarda sua posição.
– A missão é mover-se sobre a superficie e coletar rochas, 
que podem estar ou não presentes naquele quadrante
(Random).
– O planeta precisa ser inicializado com algumas rochas
(50?) e, a cada movimento do robô, precisa ser exibido na
tela.
– Ao passar sobre uma rocha, o robô a coleta e incrementa
um contador de rochas. A rocha então some do quadrante.
• Quais as entidades, características e 
responsabilidades?
– Robô
Hands-On!
Criando um sistema do zero
• Atributos: Posição e Contador de Rochas
• Métodos: Mover e Coletar Rochas
– Planeta
• Atributos: Quadrantes
• Métodos: Inicializar e Exibir

Continue navegando