Buscar

Paradigmas de Linguagens de Programação - 02 Conceitos Basicos OO Java

Prévia do material em texto

Paradigmas de Linguagens
Computacionais
Henrique Rebêlo
Centro de Informática
Universidade Federal de Pernambuco
@ Henrique Rebêlo, 2016. Some rights reserved.
Except where otherwise indicated, this work is licensed under
https://creativecommons.org/licenses/by-nc-sa/3.0/deed.pt/
Conceitos básicos de 
orientação a objetos
Programação procedural
Baseado em funções/proc.
• unidade de programação
• função/procedimento
• grupamento de funções/procedimentos para formar um 
programa…
Qual o tamanho de um array?
23 12 25 32 33 53 21 2 … 89
function doSomething() {
$array = array(23,12,25,32,33,53,21,2,...,89);
for ($i = 0; $i < count($array); $i++) {
...
}
}
O array NÃO sabe!
Usando essa idéia para outros 
objetos no mundo…
What?
You don’t know your age?
You also don’t know if you 
are romantic?
O array “pode” saber seu
próprio tamanho
23 12 25 32 33 53 21 2 … 89
count (array);
Array.size();
O que é um objeto?
| 2004 JavaOneSM Conference | Session BUS-31929
1964 1974 20041984 1994
In 1969 most programmers would have used
this has poor design and code modularity!
22 12
65 93
43 29
86 65
2 4
collection of procedures 
to operate on and 
manage table entries
6 7 5 8
+
objects are not intuitive objects are intuitive
| @ copyright Kiczales, 2004 JavaOneSM Conference | Session BUS-3192
| 2004 JavaOneSM Conference | Session BUS-319210
1964 1974 20041984 1994
OOP invented in 1961
– about same time as 
structured programming
– term “object-oriented 
programming” in 1967
– to make simulation code 
look like the model
OOP
intuitivenot intuitive
| @ copyright Kiczales, 2004 JavaOneSM Conference | Session BUS-3192
Coleção de objetos interativos
Object 1
Object 5
Object 2
Object 3
Object 4
O que podemos modelar com 
objetos ?
• agrupamento de dados e operações que representam um 
• Conta bancária
• número e saldo
• creditar e debitar
• Aluno da UFPE (cadastrado no Siga@)
• nome, cpf, endereço…
• corrigir nome, atualizar endereço
• Produto (de supermercado)
• código, descrição, valor …
• atualizar estoque, remarcar preço …
Um objeto é um…
conceito
Objeto DVD
As operações que o 
DVD pode executar
Fonte: http://www.amazon.com
O estado atual
do DVD; o que ele 
está fazendo...
Objeto conta bancária
NúmeroSaldo
21.342-7875,32
creditar
debitar
As operações que 
uma conta 
pode executarO estado
atual 
da conta
Estados do objeto conta
NúmerogetSaldo
21.342-7875,32
Crédito
Débito
NúmeroSaldo
21.342-7875,32
creditar
debitar
NúmerogetSaldo
21.342-7875,32
Crédito
Débito
NúmeroSaldo
21.342-7895,32
creditar
debitar
creditar(20)
Criando um objeto snack
Snack object…
• … using a box
Um objeto consiste de…
• Métodos: as operações que o objeto pode executar
• Atributos: informações sobre o objeto, suas
propriedades, seu estado atual
O estado é encapsulado, só pode ser
modificado pelos métodos do próprio objeto
Classe vs objeto
Precisamos de um Template!
Organizando nosso snack 
com um template!
Uma classe é um…
Conjunto de objetos do mesmo tipo, com
as mesmas características
(métodos e atributos)
Uma classe define um tipo: o tipo cujos
elementos são objetos com os 
mesmos métodos e atributos
Definindo classes em Java
O corpo de uma classe pode conter:
• atributos
• métodos
• construtores (inicializadores)
• outras classes...
public class Conta {
/* corpo da classe */
}
Definindo atributos em Java
Cada atributo tem um tipo específico,
que caracteriza as propriedades dos
Objetos da classe
public class Conta {
private String numero;
private double saldo;
…
}
• Referências
• classes
• Object
• String
• Livro
• Conta
• Produto
• …
• interfaces
• arrays
Tipos em Java
• Primitivos
• byte
• short
• int
• long
• float
• double
• boolean
• char
Os elementos de um tipo primitivo são valores, enquanto
os elementos de um tipo referência são (referências
para) objetos!
• Não é um tipo primitivo e sim uma classe
• Literais: "" "a" "CIn\nUFPE“
• Operadores: + (concatenação)
"maio " + "de " + 99 + "= maio de 99"
• Note a conversão de inteiro para string
• Há uma conversão implícita para todos os tipos
primitivos
String
• Comparação (igualdade) de dois Strings
• Tamanho de um string a
Mais operados sobre String
String a …
String b …
if (a.equals(b)){
}
…
int i = a.length();
Usando String
String s1 = "ricardo";
String s2 = "Ricardo";
if(s1.equals(s2)){
System.out.println("igual");
}
else{
System.out.println("diferente");
}
if(s1.equalsIgnoreCase(s2)){
System.out.println("igual");
}
else{
System.out.println("diferente");
}
• Extrair uma substring de uma string maior
Operador substring
String saudacao = "Bem-vindo";
String s = saudacao.substring(0,3);
// s = "Bem“;
// caracteres das posicoes 0, 1 e 2
Encapsulamento
public class Livro {
private int anoDePulibcacao;
private String titulo;
…
}
Não use preposições!
A palavra reservada private indica que os 
atributos só podem ser acessados (isto é, lidos ou
modificados) pelas operações da classe onde foram 
definidos
Expondo o necessário!
Private
Properties
Public
Capacity
Public
Capacity
Public
Capacity
Public
Capacity
Public
Capacity
Public
Capacity
Public
Capacity
Public
Capacity
From http://www.cs.brown.edu/courses/cs015/lectures.html
• Java não obriga o uso de private, mas a boa prática de 
programação orientada a objetos considera isso uma pré-
condição para a programação orientada a objetos
• Usem private!
Encapsulamento e Java
• Não importa como os métodos são implementados
• como o creditar funciona?
• como o debitar funciona?
• Portanto, escondemos a estratégia usada na 
implementação
• focus no “o que”
• esqueça sobre “como”
Abstração
HowWhat
Definindo métodos em Java
NúmerogetSaldo
21.342-7875,32
Crédito
Débito
NúmeroSaldo
21.342-7875,32
creditar
debitar
NúmerogetSaldo
21.342-7875,32
Crédito
Débito
NúmeroSaldo
21.342-7895,32
creditar
debitar
creditar(20)
• Como definir o método creditar?
Método creditar em Java
public class Conta {
private String numero;
private double saldo;
public void creditar(double valor){
this.saldo += valor;
}
…
}
Um método é uma operação que realiza ações e 
modifica os valores dos atributos do objeto responsável 
pela sua execução
Método vs encapsulamento
public class Conta {
…
public void debitar(double valor){
this.saldo -= valor;
}
…
}
Por que o método debitar não tem como parâmetro
o número da conta ?
tipo de 
retorno
parâmetros
do método
corpo do 
método
• Os objetos se comunicam para realizar tarefas
• A comunicação é feita através da troca de mensagens ou 
chamada de métodos
• Cada mensagem é uma requisição para que um objeto 
execute uma operação específica
Comunicação entre objetos
variável contendo 
referência para o objeto
Conta c = …
c.creditar(45.30);
nome do método a ser 
executado
• Desenvolvimento de uma solução é mais fácil quando 
quebramos esta solução em módulos gerenciáveis
• Desenvolver módulos separados, onde cada um é 
responsável por uma certa parte da solução
• programação modular
• OO facilita a programação modular
• módulos são as classes e objetos
Utilizando OO para desenvolver programas
• Orientação a objetos  Modularidade
• reusabilidade
• extensibilidade
• Linguagens OO têm em objetos, classes,..., elementos 
fundamentais para construir programas• linguagens OO possuem construções específicas que 
permitem mapeamento dos conceitos OO
Considerações sobre OO
Os conceitos de orientação a objetos são 
independentes da linguagem de programação
Paradigmas de Linguagens
Computacionais
Henrique Rebêlo
Centro de Informática
Universidade Federal de Pernambuco
@ Henrique Rebêlo, 2016. Some rights reserved.
Except where otherwise indicated, this work is licensed under
https://creativecommons.org/licenses/by-nc-sa/3.0/deed.pt/

Continue navegando