Académique Documents
Professionnel Documents
Culture Documents
Carlos Cassino
cassino@tecgraf.puc-rio.br
Março/2015
Objetivo
• Paradigmas de Programação
• Tipos Abstratos de Dados
• Classes & Objetos
• Modularidade
• Herança & Polimorfismo
• Interfaces
• Aninhamento de Classes
• Parametrização de Tipos
Conteúdo do Curso (cont.)
• Tratamento de Exceções
• Estudos de Caso
Introdução
Linguagem & Pensamento
• Programação Funcional
• Programação Procedural
• Programação Orientada por Objetos
Paradigma OO
Cenário Exemplo
Mamíferos
Mamíferos
Humanos
Humanos
Floricultores
Floricultores
José
José
Classes & Objetos
Objetos Materiais
Animais Vegetais
Mamíferos Rosas
Dentistas Floricultores
João José
Resumo
class Produto {
static int próximo_id = 0;
int id;
Produto() {
this.id = próximo_id++;
}
...
}
Membros de Classe: Análise do Exemplo
• Textos
• Vetores
String texto = “Exemplo”;
int[] lista = {1, 2, 3, 4, 5};
String[] nomes = {“João”, “Maria”};
• Tipos de expressões
– conversões automáticas
• podem gerar perda de precisão, não de magnitude
– conversões explícitas
byte b = 10;
float f = 0.0F;
Comandos
• Comando
– expressão de atribuição
– formas pré-fixadas ou pós-fixadas de ++ e --
– chamada de métodos
– criação de objetos
– comandos de controle de fluxo
– bloco
• Bloco = { <lista de comandos> }
Controle de Fluxo
– if-else
– switch-case-default
– while
– do-while
– for
– break
– continue
– return
} label
if-else
int i = f();
switch (i)
{
case -1:
...
break;
case 0:
...
break;
default:
...
}
while
int i = 0;
while (i<10)
{
i++;
System.out.println(i);
}
do-while
int i = 0;
do
{
i++;
System.out.println(i);
}
while (i<10);
for
int i = 0;
while (true)
{
if (i==10) break;
i++;
System.out.println(i);
}
continue
int i = 0;
while (true)
{
i++;
if (i%2 == 1) continue;
System.out.println(i);
}
label
início:
for (int i=0; i<10; i++)
for (int j=0; j<10; j++)
{
if (v[i][j] < 0) break início;
...
}
...
return
class Stack {
int[] data;
int top_index;
Stack(int size) {
data = new int[size];
top_index = -1;
}
boolean isEmpty() { return (top_index < 0); }
void push(int n) { data[++top_index] = n; }
int pop() { return data[top_index--]; }
int top() { return data[top_index]; }
}
Uso da Pilha
Axiomas:
[s = new Stack(); s.isEmpty()]
![s.push(n); s.isEmpty()]
[s.push(n); s.top()] = n
[s.push(n); s.pop(); s.top()] = s.top()
Encapsulamento
class Stack {
private int[] data;
private int top_index;
Stack(int size) {
data = new int[size];
top_index = -1;
}
boolean isEmpty() { return (top_index < 0); }
void push(int n) { data[++top_index] = n; }
int pop() { return data[top_index--]; }
int top() { return data[top_index]; }
}
Exemplo de Controle de Acesso
class Point {
int x = 0;
int y = 0;
Point() {
}
Point(int x, int y) {
this.x = x;
this.y = y;
}
...
}
Sobrecarga de Construtores: Exemplo
class Point {
int x, y;
Point() {
this(0,0);
}
Point(int x, int y) {
this.x = x;
this.y = y;
}
...
}
Sobrecarga de Métodos
Pacote P1
A
int i;
B
int i;
Herança de Membros
Pacote P1
A
int i;
public int j;
B
int i;
public int j;
Herança de Membros
Pacote P1
A
int i;
public int j;
protected int k;
B
int i;
public int j;
protected int k;
Herança de Membros
Pacote P1
A
int i;
public int j;
protected int k;
private int l;
B
int i;
public int j;
protected int k;
Herança de Membros
Pacote P1 Pacote P2
A P1.A
int i;
public int j;
protected int k;
private int l;
B C
int i; public int j;
public int j; protected int k;
protected int k;
Herança em Java
Animais Vegetais
Mamíferos Rosas
Dentistas Floricultores
João José
Ampliando o Exemplo
B C
D
Compatibilidade de Tipos
package p;
public class A {
public static class B {
...
}
}
class A {
int i;
A
class B {
void f() {
void g() {...} B b = new B();
} b.g();
void f() {...} }
}
B
void g() {
i = 1;
}
Pilha revisitada
...
public boolean isEmpty() { return (list == null); }
public void push(int i) {
list = new ListNode(i, list);
}
public int pop() {
ListNode head = list;
list = list.next;
return head.value;
}
public int top() { return list.value; }
}
Exercício 5
...
public boolean isEmpty() { return (list == null); }
public void push(V v) {
list = new ListNode(v, list);
}
public V pop() {
ListNode head = list;
list = list.next;
return head.value;
}
public V top() { return list.value; }
}
Pilha revisitada: Exemplos de uso
for (float f : l) {
System.out.println(f);
}
Parametrização de Tipos em Métodos
...
public void setKey(K key) { this.key = key; }
public void setValue(V value) { this.value = value; }
public K getKey() { return key; }
public V getValue() { return value; }
}
• Definição:
– Exceção é a ocorrência de uma condição anormal
durante a execução de um método
– Falha é a inabilidade de um método cumprir a sua
função
– Erro é a presença de um método que não satisfaz sua
especificação
• Tipicamente, a existência de um erro gera uma
falha que resulta em uma exceção
Exceções & Modularidade
import java.io.*;
public class PrintFile {
public static void main(String[] args) {
try {
InputStream fin = new FileInputStream(args[0]);
InputStream in = new BufferedInputStream(fin);
int b;
while ((b = in.read()) != -1) {
System.out.print(b);
}
} catch (IOException e) {
System.out.println(e);
}
}
}
Orientação por Eventos
Orientação por Eventos
Panel
Container Dialog
Window
Frame
Button
Component
Label
TextArea
TextComponent
TextField
Component
import java.awt.*;
ActionEvent
AWTEvent TextEvent
FocusEvent
ComponentEvent
WindowEvent
AWTEvent