0% acharam este documento útil (0 voto)
195 visualizações15 páginas

(Apostila) Java - Programação Orientada A Objetos

O documento discute programação orientada a objetos em Java, focando em encapsulamento, herança e polimorfismo. A herança permite criar novas classes baseadas em classes existentes, estendendo seus atributos e comportamentos. Isso é ilustrado com exemplos de classes Ponto e Círculo, onde Círculo herda de Ponto.

Enviado por

Sergio Lima
Direitos autorais
© Attribution Non-Commercial (BY-NC)
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
195 visualizações15 páginas

(Apostila) Java - Programação Orientada A Objetos

O documento discute programação orientada a objetos em Java, focando em encapsulamento, herança e polimorfismo. A herança permite criar novas classes baseadas em classes existentes, estendendo seus atributos e comportamentos. Isso é ilustrado com exemplos de classes Ponto e Círculo, onde Círculo herda de Ponto.

Enviado por

Sergio Lima
Direitos autorais
© Attribution Non-Commercial (BY-NC)
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 15

Programação Orientada a Objetos em Java

Encapsulamento
Os três pilares da POO Herança
Polimorfismo

Herança => Reaproveitando código


Vimos que o Encapsulamento permite:
- escrever objetos bem definidos e independentes
- que um objeto use outro objeto, através de mensagem

A herança é a segunda maneira de relacionamento entre objetos

Permite que você baseie a definição de uma nova


classe a partir de uma classe previamente existente.
Classe Ponto

y double x;
double y;
SuperClasse
o Ponto ( )
rai Ponto (double x, double y)
y
void setPonto (double x, double y)
String emPalavras ( )

Classe Circulo
x x
double r;
Circulo ( )
Circulo (int double, double y,double r) SubClasse
void setRaio(double r)
String emPalavras ( )

POOemJava-Herança[anibal@directnet.com.br] 1
public class Ponto{
protected double x, y;

public Ponto(){
setPonto( 0, 0 );
}
public Ponto( double a, double b ){
setPonto( a, b );
}
public void setPonto( double a, double b ){
x = a;
y = b;
}
public String emPalavras( ){
return "[" + x + ", " + y + "]";
}
}
public class Circulo extends Ponto{
protected double r;

public Circulo(){
setRaio( 0 );
}
public Circulo( double a, double b, double r ){
super( a, b );
setRaio( r );
}
public void setRaio( double r ){
this.r = r;
}
public String emPalavras( ){
return super.emPalavras( ) + "[" + r + "]";
}
} POOemJava-Herança[anibal@directnet.com.br] 2
Herança: é o meio pelo qual um objeto herda comportamento e
atributos de outros objetos similares

através da herança pode-se criar uma nova classe de


objetos definindo apenas as diferenças

class Dog extends Mamifero {

// aqui entra o código

subclasse superclasse
superclasse subclasse
public class Mamifero { public class Dog extends Mamifero {
String name;
public void speak ( ) {
public void sleep ( ) { System.out.println(“Arf! Arf!”);
System.out.println(“ZZ ZZZ ZZ”);
} }
} }

public class Pluto extends Mamifero {

public void speak( ) {


System.out.println(“Cadê a minha Medalha?”);
}
}

POOemJava-Herança[anibal@directnet.com.br] 3
Testando a Hierarquia
Speak.java
class Speak {
public static void main( String arguments[ ] ) {
Dog lessie = new Dog( ); // objeto lessie da classe Dog
Pluto mutly = new Pluto(); // objeto mutly da classe Pluto

lessie.name = “Boby”;
mutly.name = “Baco”;

System.out.println (“Primeiro vamos ouvir a Lessie: ”);


lessie.speak();

System.out.println (“Agora é a vez do Mutly: ”);


mutly.speak();

System.out.println (“Já é hora de ambos dormirem: ”);


lessie.sleep();
mutly.sleep();
}
}

Saída:
Primeiro vamos ouvir a Lessie:
Arf! Arf!
Agora é a vez do Mutly
Cadê a minha Medalha?
Já é hora de ambos dormirem:
ZZ ZZZ ZZ
ZZ ZZZ ZZ

Java NÃO suporta Herança Múltipla

classes que herdam de mais de uma classe

Programas Orientados a Objetos são mais fáceis de serem depurados

permite a concentração em um Objeto específico


POOemJava-Herança[anibal@directnet.com.br] 4
Vamos modelar a classe Employee (empregado) que é uma pessoa
public class Employee {
private String first_name;
private String last_name;
private double wage;

public Employee (String first_name, String last_name, double wage) {


this.first_name = first_name;
this.last_name = last_name;
this.wage = wage;
}
public double getWage ( ) {
return wage;
}
public String getFirstName ( ) {
return first_name;
}
public String getLastName ( ) {
return last_name;
}
}

Instâncias da classe Employee podem aparecer em um aplicativo


de banco de dados de folha de pagamento.

Supor: Modelar um funcionário comissionado que possui um


salário-base + comissão por venda

A classe CommissionedEmployee é exatamente igual à


classe Employee. Um objeto CommissionedEmployee
é um objeto Employee.

POOemJava-Herança[anibal@directnet.com.br] 5
public class CommissionedEmployee extends Employee {
private double commission; // custo por unidade
private int units; // controle do # de unidades vendidas

public CommissionedEmployee (String first_name, String last_name,


double wage, double commission ) {
super (first_name, last_name, wage);
this.commission = commission;
}
public double calculatePay ( ) {
return getWage( ) + (commission * units);
}
public void addSales (int units ) {
this.units = this.units + units;
}
public void resetSales( ) {
units = 0;
}
}

A classe CommissionedEmployee baseia sua definição


na classe Employee já existente.

Como CommissionedEmployee herda de Employee:


- getFirstName( )
- getLastName( )
- getWage( )

Os atributos first_name, last_name e wage se tornarão


todos parte de sua definição.

POOemJava-Herança[anibal@directnet.com.br] 6
Como a interface pública de Employee se torna parte da interface
de CommissionedEmployee, você pode enviar para
CommissionedEmployee qualquer mensagem que poderia
enviar para Employee.

public class EmployeeExample {


public static void main(String []args) {
CommissionedEmployee c =
new CommissionedEmployee (“Mr.”,”Sales”,5.50,1.00);

c.addSales(5);
System.out.println(“First Name: ” + c.getFirstName( ) );
System.out.println(“Last Name: ” + c.getLastName( ) );
System.out.println(“Base pay: $ ” + c.getWage( ) );
System.out.println(“Total Pay: ” + c.calculatePay( ) );
}
}

C:\aulas\java> javac EmployeeExample.java


C:\aulas\java> java EmployeeExample
First Name: Mr.
Last Name: Sales
Base Pay: $5.5
Total Pay: $10.5

POOemJava-Herança[anibal@directnet.com.br] 7
Classes Abstratas

Ao implementar essa public class Animal


hierarquia, percebemos {
que o código da classe private String nome;
animal é muito genérico:
public Animal(String n) {
nome = n;
}
public void imp( ) {
System.out.println("Nome: "+nome);
}
public String getName( ) {
return(nome);
}
public void talk( ) {
System.out.println("Eu nao falo");
}
}

Na prática, nunca iremos instanciar um animal, pois ele serve apenas


para a criação de pássaros e mamíferos. Seguindo a mesma lógica,
essas duas classes também não serão instanciadas. Ou seja, somente
as classes derivadas de Passaro (BemTeVi, Papagaio) e Mamifero
(Cachorro, Vaca) é que serão usadas efetivamente.
POOemJava-Herança[anibal@directnet.com.br] 8
Para esse tipo de situação, Java suporta a criação de uma
classe abstrata. Esse tipo de classe não pode ser instanciado,
e serve apenas para derivarmos novas classes.

Veja como a classe animal pode ser implementada dessa forma:

public abstract class Animal


{
private String nome;

public Animal(String n) {
nome = n;
}

public void imp() {


System.out.println("Nome: "+nome);
}

public String getName() { return(nome); }

public abstract void talk();


}

Observe que o método talk( ) também foi declarado como abstract:


isso significa que esse método não foi implementado nesta classe
e deverá, obrigatoriamente, ser implementado nas classes derivadas.
Conseqüentemente, as classes Passaro e Mamifero também serão
Classes abstratas:

POOemJava-Herança[anibal@directnet.com.br] 9
public abstract class Passaro extends Animal
{
public Passaro(String n) {
super(n);
}
public void talk( ) {
System.out.println("Piu piu");
}
}
Repare que o método talk( ) em Mamifero é abstract, pois
não possui implementação. Já em Passaro, há implementação.

public abstract class Mamifero extends Animal


{
public Mamifero(String n) {
super(n);
}
public abstract void talk( );
}
Além de fornecer uma modelagem mais robusta ao programador,
as classes abstratas também são representadas de forma mais
eficiente, pois nunca precisarão ser instanciadas.

Finalize os exercícios:
1- Super classe Ponto e Subclasse Círculo.
2- Criar a classe Retangulo utilizando a Ponto como base.
3- Classe de animais => utilizando classes abstratas.
POOemJava-Herança[anibal@directnet.com.br] 10
Orientação a Objetos (OO)
O termo Orientação a Objetos (OO) significa organizar o
mundo real como uma coleção de objetos que incorporam
Estrutura de Dados e Comportamento.

Objetos são pacotes de software compostos de dados e procedimentos


que atuam sobre estes dados. Os procedimentos são também conhecidos
como Métodos e determinam o comportamento do objeto.

Objeto = Dado + Método

Objeto = Estado + Comportamento

Um Objeto Comportamento/Métodos/Procedimentos

Propriedades/Dados/ Variáveis

andar tamanho
ar
O Objeto Carro in
pa

z
bu
ra

capacidade
r
girar

velocidade

Quilometragem

Todo o acesso aos dados ou propriedades


andar
do objeto é realizado através de sua interface
ar
in
pa

z
bu
ra
r
girar

POOemJava-Herança[anibal@directnet.com.br] 11
Encapsulamento
O Encapsulamento é definido como uma técnica para minimizar
interdependências entre módulos através da definição de interfaces
externas.
Interface
andar
in
ar Mudanças na implementação de uma classe
pa

z
bu
ra

que preserve a interface externa não afeta


r
girar

outras definições de classes.

Exemplo: o método parar sofreu alteração em seu algoritmo


mas, sua interface permanece a mesma.

Mensagens
Objetos interagem e se comunicam através de Mensagens

Emissor Andar(...)
Receptor

Mensagem para um Carro

As Mensagens identificam os Métodos a serem executados


no objeto Receptor.

POOemJava-Herança[anibal@directnet.com.br] 12
Métodos
O que um determinado Método pode fazer com os Dados do Objeto?
Construtor
Destrutor
Tipos de Métodos
Transformador
Acesso
Exercícios:
1- Dê três exemplos de Objetos
2- Para cada um deles, sugira alguns Métodos pertinentes
3- Vamos implementar esses exemplos em Java
class bibliX { metodoB
int m, o A m

bi
od

bl
et

iX
int z; m
z

bibliX
float n; n
float s;
s
bibliX( ) { m=0; z=0; n=0.0; s=0.0; }
bibliX(int a; int b; float c; float d) {
m=a; z = b; n = c; s = d;
}
int metodoA ( ){
return (m + n);
}
void metodoB ( ) {
System.out.println(“Valor de m: ” + m + “valor de s: ”+ s);
}
}
class usaX ( ) {
public static void main (String arg []) {
bibliX aux = new bibliX(10,20, 12.5, 22.8 ) // método Construtor
aux.metodoA( ); javac bibliX.java
aux.metodoB( ); javac usaX.java
} java usaX
} POOemJava-Herança[anibal@directnet.com.br] 13
Projeto: Implementar uma classe CDPlayer cuja interface é apresentada
na Figura abaixo.
Lembre-se: a cada interface, disponível ao usuário,
haverá um método correspondente.

Stop ( )
)

Pa
y(

us
a
Pl

e(
)
Eject ( )
Pense nos Atributos e Métodos necessários para implementar o projeto

class CDPlayer {
// atributos

// métodos
CDPlayer( ){ } // construtor
Play ( ) {

}
Eject ( ) {

}
Pause ( ) {
}
MetodoX ( ) { }
}
POOemJava-Herança[anibal@directnet.com.br] 14
POOemJava-Herança[anibal@directnet.com.br] 15

Você também pode gostar

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy