Você está na página 1de 42

Programação

Orientada
a
Objetos

[Conceitos e
Profº Silvio Antonio Carro
silvio@unoeste.br
Fundamentos]
Profº Dione Jonathan Ferrari
dferrari@unoeste.br
Problemas:
•Pequena alteração nos dados leva a
grandes alterações em todo o programa;

•As várias sub-rotinas tem fortes


correlações entre si;

•Torna-se arriscado fazer alterações no


Evolução dos paradigmas programa;
“o programa em um só bloco”
• Dados globais, embora em menor grau.
• Subrotinas vistas como forma de abstração
• Passagem de parâmetro
• Dados estruturados

Problemas:

• Programas ainda dependentes do tipo de


dados;
Evolução dos paradigmas • Em programas complexos é difícil a
“inicio da modularização” manutenção.
• Agrupamento de funções em módulos
para reduzir a complexidade da
manutenção. (units, .H)
• Módulos são reutilizados

Problemas:
• Há dependência entre os módulos
• Alterações em um módulo leva
Evolução dos paradigmas alterações em outros módulos.
“inicio da abstração”
POO

• Objetos encapsulam dados e funções

• Objetos do programa representam objetos do


problema

• Cada objeto é responsável por operações


específicas

• Cada objeto é responsável pelos seus dados e


Evolução dos paradigmas só ele pode alterar seu estado
“semelhança com o mundo real”
História

• 1967: Simula/Noruega – introduz os primeiros conceitos de OO


• 1972: Smalltalk – Xerox
• 1980: C++ – linguagem híbrida, derivada da linguagem C.
• 1983: Ada – criada para uso militar nos EUA
• 1984: Eiffel – primeiras características formais de OO
• 1986: Object pascal
• 1995: JAVA – Linguagem puramente orientada a objetos
• 1995: Várias linguagens agregando conceitos de OO
• 2000: Plataforma .NET
A quebra de paradigma
POO: linguagens
Linguagens que adotam o paradigma orientado à objeto:

• Java • Ruby • Smalltalk • Common Lisp


• C# • C++ • Python • Perl 5

• Eiffel • Delphi (Object Pascal) • Ada 95 • Javascript

• PHP • Objective-C • Kotlin • Dart

• Visual Basic • Ruby e muitas outras


Por que OO é importante?

Complexidade

Sistemas cada vez mais complexos


Tamanho, novas plataformas, novas tecnologias.
Facilidade de uso implica em complexidade de construção
Complexidade do domínio da aplicação
Organizações dependem muito de sistemas

Complexidade do processo de desenvolvimento


Gerência de atividades e documentos
Necessidade de equipes
Por que OO é importante?

Complexidade

– Estratégias para se administrar a complexidade

• Decomposição (Modularidade)

• Abstração

• Encapsulamento

• Especialização (Hierarquias)
Por que OO é importante?
Decomposição
“Dividir para conquistar”
• Decomposição sucessiva de problemas em subproblemas de mais
fácil tratamento

• A decomposição pode ser feita sob o ponto de vista


de um elemento e suas partes
de um procedimento e suas etapas

Procedimento Desenhar Quadrado (Cx, Cy, Lado, Cor)


{
DesenharLados(Coordx, Coordy, Lado, Cor)
PintarFundo(Coordx, Coordy, Lado, Cor)
}
Por que OO é importante?
Abstração

É uma forma de minimizar a complexidade.

Uma boa abstração coloca em destaque apenas os aspectos mais relevantes aos
utilizadores.

Em termos de desenvolvimento de sistemas, abstração significa concentrar-se no que


um objeto é e faz antes de se decidir como ele será implementado

Exemplo: String em C e String em Java


Por que OO é importante?
Encapsulamento

Esconde ou protege as classes (coloca os dados e funções sob uma mesma estrutura)

Impede o usuário de enxergar detalhes de implementação (ocultação de informação)

Facilita o uso dos dados do objeto

Separa o usuário da classe, de seu implementador


string.length(100)
Por que OO é importante?
Herança

Conceito que expressa similaridades entre os objetos

Estabelecem relacionamentos de generalização-especialização entre classes

Permitem estabelecer hierarquias


de classificação

14
O que é Orientação a Objetos?
Paradigma ATUAL
 Afeta análise, projeto (design) e programação

A análise orientada a objetos


 Determina o que o sistema deve fazer: Quais os atores envolvidos? Quais as atividades a serem
realizadas?
 Decompõe o sistema em objetos: Quais são? Que tarefas cada objeto terá que fazer?

O design orientado a objetos


 Define como o sistema será implementado
 Modela os relacionamentos entre os objetos e atores (pode-se usar uma notação específica como
UML)
 Utiliza e reutiliza abstrações como classes, objetos, frameworks, APIs, padrões de projeto
Conceitos básicos da tecnologia de objeto

Onde quer que você olhe no mundo real, você vê objetos


– Os humanos pensam em termos de objetos
– Os programas de computador também podem ser vistos como objetos

Mensagens
Conceitos básicos da tecnologia de objeto

Todos os objetos têm:


– Informações (por exemplo: peso, cor do cabelo, altura)
– Comportamentos (por exemplo: anda, corre, dorme)

– Diferentes objetos podem ter atributos semelhantes e podem exibir


comportamentos semelhantes
– Exemplos:

Bebês e Adultos Humanos e chimpanzés

Também modela a comunicação entre objetos (mensagens)


Conceitos básicos da tecnologia de objeto
Em uma linguagem OO pura
– Uma variável é um objeto
– Um programa é um objeto
– Um procedimento é um objeto

Um objeto é composto de objetos, portanto


– Um programa (objeto) pode ter variáveis (objetos que representam seu estado) e procedimentos
(objetos que representam seu comportamento)

Analogia: abstração de um telefone celular


– É composto de outros objetos, entre eles bateria e botões
– A bateria é um objeto também, que possui pelo menos um outro objeto: carga, que representa seu
estado
– Os botões implementam comportamentos
Exemplo: ARKANOID
Exemplo: ARKANOID
Solução Algorítmica

Jogo

Desenhar Jogar
Tela

Desenhar Desenhar Desenhar Lançar


Blocos raquete bola a bola

Ver posição Mover a Mover Atualizar Atualizar


bola bola raquete resultado Tela

• Fazer divisão Top-Down


• Identificar funções
Exemplo: ARKANOID

Solução OO

bloco

bola

Arkanoid

• identificar os objetos e suas características


• Identificar as relações entre os objetos
raquete
Como eu uso esses
conceitos em Java ???
Linguagem Java - Classes

O que é uma Classe?


– Classes são uma especificação para objetos
– Uma classe representa um tipo de dados complexo
– Classes descrevem
• Tipos dos dados que compõem o objeto (o que podem armazenar)
• Procedimentos que o objeto pode executar (o que podem fazer)

Classes definem lógica estática


– Relacionamentos entre classes são definidos na programação e não mudam durante a
execução
– Relacionamentos entre objetos são dinâmicos e podem mudar. O funcionamento da
aplicação reflete a lógica de relacionamento entre os objetos, e não entre as classes.
Linguagem Java - Classes

Uma classe pode ser vista como o projeto de um objeto


“Abstrações utilizadas para representar um conjunto de objetos com
características e comportamento idênticos”

class Pessoa
{
Pessoa String nome;
- Nome ... em Java ... double altura;
- Altura String sexo;
- Sexo double peso;
- Peso int idade;
- Idade }
Classe Pessoa.java
Linguagem Java - Objetos

Classes são moldes ...


... os objetos são os produtos desses moldes !

Objetos são conceitos que têm


– identidade (a referência)
– estado (seus atributos) e
– comportamento (seus métodos)

Objeto é uma instância de uma classe!


Instanciação
Mundo Real Linguagem Java

class Pessoa
Pessoa
{
- Nome String nome;
... em Java ...
- Altura double altura;
- Sexo String sexo;
- Peso double peso;
- Idade int idade;
Classe }

Pessoa.java

Instância Instanciando um objeto


de Pessoa da classe Pessoa

...
Pessoa P1;
José P1 = new Pessoa()
... em Java ... P1.nome = “José”;
Altura: 1,80
P1.altura = 1.80;
Peso: 85 P1.peso = 85;
Sexo: Masc P1.sexo = “masc”;
Idade: 36 P1.idade = 36;
...

26
Linguagem Java - Objetos

Objetos são conceitos que têm


– identidade (a referência)
– estado (seus atributos) e
– comportamento (seus métodos)
Linguagem Java - Objetos
Linguagem Java

Objetos são conceitos que têm class Pessoa


{
String nome;
– identidade (a referência) double altura;
String sexo;
– estado (seus atributos) e double peso;
int idade;
– comportamento (seus métodos) }

Pessoa.java

Instanciando um objeto
da classe Pessoa

Identidade do Objeto é P1 ...


Pessoa P1;
P1 = new Pessoa()
P1.nome = “José”;
P1 é a referência ao objeto ... P1.altura = 1.80;
P1.peso = 85;
P1.sexo = “masc”;
P1.idade = 36;
...
28
Linguagem Java - Objetos
Linguagem Java

Objetos são conceitos que têm class Pessoa


{
String nome;
– identidade (a referência) double altura;
String sexo;
– estado (seus atributos) e double peso;
int idade;
– comportamento (seus métodos) }

Pessoa.java

Instanciando um objeto
da classe Pessoa
...
Pessoa P1;
Instanciação do objeto P1 ... P1 = new Pessoa()
P1.nome = “José”;
P1.altura = 1.80;
P1.peso = 85;
P1.sexo = “masc”;
P1.idade = 36;
...
29
Linguagem Java - Objetos
Linguagem Java

Objetos são conceitos que têm class Pessoa


{
String nome;
– identidade (a referência) double altura;
String sexo;
– estado (seus atributos) e double peso;
int idade;
– comportamento (seus métodos) }

Pessoa.java

Instanciando um objeto
da classe Pessoa
Os atributos de um objeto ...
definem o seu estado Pessoa P1;
P1 = new Pessoa()
Variáveis de Instância! P1.nome = “José”;
P1.altura = 1.80;
P1.peso = 85;
O estado de um objeto pode P1.sexo = “masc”;
mudar durante a sua existência P1.idade = 36;
...
30
Linguagem Java - Objetos
Linguagem Java
class Pessoa
Objetos são conceitos que têm {
String nome;
– identidade (a referência) double altura;
String sexo;
– estado (seus atributos) e double peso;
int idade;
– comportamento (seus métodos) }
Andar( ) { ... };

Pessoa.java

Instanciando um objeto
da classe Pessoa
Os métodos implementam os ...
comportamento de um objeto Pessoa P1;
P1 = new Pessoa()
Métodos de Instância P1.nome = “José”;
P1.altura = 1.80;
P1.peso = 85;
“Mensagens são utilizadas para P1.sexo = “masc”;
fazer comunicação entre P1.idade = 36;
objetos e podem mudar o P1.Andar ( );
estado atual do objeto” 31
Linguagem Java - Objetos

Importante

• Tudo que um objeto não sabe ou não pode fazer


DEVE ser excluído dele
– Exemplo: Bicicleta não pode latir ou coçar

– Não devem existir variáveis e métodos para estes


estados e comportamentos no objeto bicicleta
Linguagem Java - Herança

• Permite obter uma nova classe de uma já existente, sendo possível:


– Incluir dados e códigos em uma classe sem mudar sua estrutura original
– Usar o código novamente (REUSO)
– Alterar o comportamento de uma classe, mantendo sua interface (polimorfismo)

• A classe original é chamada de superclasse e a classe originada é


denominada subclasse
Linguagem Java - Herança
Mundo Real Linguagem Java

class Pessoa
Pessoa {
- Nome String nome;
- Altura double altura;
- Sexo String sexo;
- Peso double peso;
int idade;
- Idade
Classe
Andar ( ) { ... };
}

Pessoa.java

Funcionario.java
Funcionario
- Nome
- Altura class Funcionario extends Pessoa
{
- Sexo
int cargo;
- Peso double salario;
- Idade
- Cargo CalcularSalario ( ) { ... };
- Salario Promocao ( ) { ... };
}
Classe
Linguagem Java - Polimorfismo

Capacidade de um objeto responder a uma mensagem de várias


maneiras

Pode ocorrer de duas formas


– Overloading
– Overriding
Linguagem Java - Polimorfismo
Overloading
– Tipo mais simples de polimorfismo
– Resolvido pelo compilador em tempo de compilação
– Qualquer classe pode usar o mesmo nome para métodos diferentes (de preferência
relacionados)
class Pessoa
Compilador escolhe o método {
comparando os tipos de String nome;
argumentos double altura;
String sexo;
... double peso;
P1.Andar ( ); int idade;
P1.Andar (10);
Andar ( ) { ... };
... Andar ( int velocidade ) { ... };
}
Linguagem Java - Polimorfismo
Linguagem Java
Overriding class Pessoa
– Tipo mais complicado de polimorfismo {
String nome;
– Resolvido dinamicamente em tempo de double altura;
String sexo;
execução double peso;
int idade;
– Ocorre quando uma subclasse tem um
Andar ( ) { ... };
método com a mesma assinatura da }

superclasse Pessoa.java

Funcionario.java
...
Pessoa P1; class Funcionario extends Pessoa
{
P1 = new Pessoa()
int cargo;
Funcionario F1 double salario;
F1 = new Funcionario()
P1.Andar ( ); CalcularSalario ( ) { ... };
F1.Andar ( ); Promocao ( ) { ... };
... Andar ( ) { ... };
}
Resumo de termos da POO
• Classe representa um conjunto de objetos com características afins. Uma classe define o comportamento
dos objetos através de seus métodos, e quais estados ele é capaz de manter através de seus atributos.
Exemplo de classe: Os seres humanos.

• Subclasse é uma nova classe originada de sua classe pai.

• Objeto é uma instância de uma classe. Um objeto é capaz de armazenar estados através de seus atributos e
reagir a mensagens enviadas a ele, assim como se relacionar e enviar mensagens a outros objetos. Exemplo
de objetos da classe Humanos: João, José, Maria.

• Atributos são características de um objeto. Basicamente a estrutura de dados que vai representar a classe.
Exemplos: Funcionário: nome, endereço,telefone, CPF,....; Carro: nome, marca, ano, cor, …; .Por sua vez, os
atributos possuem valores. Por exemplo, o atributo cor pode conter o valor azul. O conjunto de valores dos
atributos de um determinado objeto é chamado de estado.
Resumo de termos da POO
• Métodos definem as habilidades dos objetos. Bidu é uma instância da classe Cachorro, portanto tem habilidade para
latir, implementada através do método deUmLatido. Um método em uma classe é apenas uma definição. A ação só
ocorre quando o método é invocado através do objeto, no caso Bidu. Dentro do programa, a utilização de um método
deve afetar apenas um objeto em particular; Todos os cachorros podem latir, mas você quer que apenas Bidu dê o
latido. Normalmente, uma classe possui diversos métodos, que no caso da classe Cachorro poderiam ser sente, coma e
morda.

• Mensagem é uma chamada a um objeto para invocar um de seus métodos, ativando um comportamento descrito por
sua classe. Também pode ser direcionada diretamente a uma classe (através de uma invocação a um método
estático).

• Herança (ou generalização) é o mecanismo pelo qual uma classe (sub-classe) pode estender outra classe (super-
classe), aproveitando seus comportamentos (métodos) e variáveis possíveis (atributos). Um exemplo de herança:
Mamífero é super-classe de Humano. Ou seja, um Humano é um mamífero. Há Herança múltipla quando uma sub-
classe possui mais de uma super-classe. Essa relação é normalmente chamada de relação "é um“.
Resumo de termos da POO
• Associação é o mecanismo pelo qual um objeto utiliza os recursos de outro. Pode tratar-se de uma
associação simples "usa um" ou de um acoplamento "parte de". Por exemplo: Um humano usa um
telefone. A tecla "1" é parte de um telefone.

• Encapsulamento consiste na separação de aspectos internos e externos de um objeto. Este mecanismo é


utilizado amplamente para impedir o acesso direto ao estado de um objeto (seus atributos),
disponibilizando externamente apenas os métodos que alteram estes estados. Exemplo: você não precisa
conhecer os detalhes dos circuitos de um telefone para utilizá-lo. A carcaça do telefone encapsula esses
detalhes, provendo a você uma interface mais amigável (os botões, o monofone e os sinais de tom).

• Abstração é a habilidade de concentrar nos aspectos essenciais de um contexto qualquer, ignorando


características menos importantes ou acidentais. Em modelagem orientada a objetos, uma classe é uma
abstração de entidades existentes no domínio do sistema de software.
Resumo de termos da POO
• Polimorfismo consiste em quatro propriedades que a linguagem pode ter (atente para o fato de que
nem toda linguagem orientada a objeto tem implementado todos os tipos de polimorfismo):
– Universal:
• Inclusão: um ponteiro para classe mãe pode apontar para uma instância de uma classe filha (exemplo em Java: "List
lista = new LinkedList();" (tipo de polimorfismo mais básico que existe).
• Paramétrico: se restringe ao uso de templates (C++, por exemplo) e generics (Java).
– Ad-Hoc:
• Sobrecarga: duas funçõeses/métodos com o mesmo nome mas assinaturas diferentes.
• Coerção: a linguagem que faz as conversões implicitamente (como por exemplo atribuir um int a um float em C++, isto
é aceito mesmo sendo tipos diferentes pois a conversão é feita implicitamente).

• Interface é um contrato entre a classe e o mundo externo. Quando uma classe implementa uma
interface, ela está comprometida a fornecer o comportamento publicado pela interface.

• Pacotes são referências para organização lógica de classes e interfaces.


Programação Orientada a Objetos
- POO: Conceitos e Fundamentos -

Material produzido por:


Profº Silvio Antonio Carro silvio@unoeste.br
Profº Dione Jonathan Ferrari dferrari@unoeste.br

Você também pode gostar