Vous êtes sur la page 1sur 101

Programao Orientada a

Objetos em
Parte 1
Fundamentos de Java

2
Introduo
Motivaes para Uso da Orientao
a Objetos
uso de abstrao de dados simplifica
o processo de modelagem
paradigma nico para anlise, projeto
e implementao
reduo de custos de
desenvolvimento atravs do reuso de
cdigo
reduo de custos de manuteno
atravs da separao entre interface
e implementao 3
Introduo
Motivaes para o Uso de Java
Propsito geral
Bem projetada
Orientada a objetos
Confivel
Relativamente fcil
ou seja, relativamente difcil ;-)
Segura

4
JVM
Program
Compila
a Fonte Bytecodes
dor

Interpreta
dor Processa
(program dor
a
executve
Combina compilao
l) e interpretao
Vantagens
Execuo rpida
Portabilidade
Introduo 5
A Plataforma Java
Baseia-se na JVM
Executveis escritos em bytecodes
Idia fundamental:
write once, run anywhere
Linguagem Java a parte central
da plataforma

Introduo 6
Ambiente de Execuo

Bytecode
s

J J J J
V JIT V JIT V JIT V JIT
M M M M

IOS Window Linux Solaris


s

Introduo 7
Caractersticas de Java

Orientada a Objetos
com exceo dos tipos primitivos,
tudo so classes e objeto
no existe o conceito de funes ou
procedimentos independentes
reuso de cdigo atravs de
bibliotecas de classes
bem mais simples que C++

Introduo 8
Caractersticas de Java
Portvel
Arquitetura baseada na JVM
Padro rgido da linguagem
programas fontes so os mesmos
fixa o tamanho e intervalos dos tipos bsicos
fixa o comportamento dos operadores
biblioteca de classes padronizada

Introduo 9
Caractersticas de Java
Confivel
orientao a objetos induz o
programador a prticas de
programao confiveis
ausncia de ponteiros (no permite a
manipulao direta de endereos de
memria)
mecanismo de tratamento de
excees
verificao extensiva em tempo de
compilao e de execuo
Introduo
No elimina necessidade de boa prtica 10
Caractersticas de Java
Dinmica
classes so carregadas sob demanda
Distribuda
suporte atravs de bibliotecas de alto
nvel
invocao de mtodos de objetos
remotos
Applets
programas especiais carregados e
executados atravs de Web browsers
Introduo 11
atualizao de cdigo sem distribuio
Caractersticas de Java
Segura
Vrias camadas de controle de
segurana contra cdigo malicioso
no permite ao programador manipular
endereos
interpretador Java realiza verificao de
bytecodes (se no contm cdigo ilegal)
sempre que cdigo no confivel
carregado
uso de sandbox (acesso limitado aos
recursos locais)
assinatura digital criptografada
Introduo 12

Caractersticas de Java
Eficiente
Embora interpretada
20 vezes mais lenta que equivalente em
C
satisfaz grande parte das aplicaes
Interpretadores Java podem incluir
compiladores de bytecodes JIT
Pode-se escrever partes do programa
em C/C++
Pode-se usar compilador especfico para
plataforma de execuo
Introduo
Nunca ser igual a C 13
Caractersticas de Java

Suporta Concorrncia
rotinas mltiplas concorrentes
(threads)
elementos para sincronizao

Introduo 14
Componentes do JDK
Compilador (javac)
Interpretador (java)
Visualizador de applets
(appletviewer)
Bibliotecas (packages)
Gerador de documentao
(javadoc)
Depurador de programas (jdb)
Ambiente de execuo (jre)
Introduo 15
Primeiro Exemplo

//Eco.java
import java.io.*;
public class Eco {
public static void main(String[] args) {
for (int i=0; i < args.length; i++)
System.out.print(args[i] + " ");
System.out.println();
}
}

Aplicao
Salvar como arquivo Eco.java
Introduo 16
Primeiro Exemplo

Compilar com javac


javac Eco.java
Executar atravs de java
java Eco
java Eco Testando 1 2 3

Introduo 17
Tipos, Variveis e
Operadores
Tipos primitivos e compostos
Variveis
declarao
escopo
tempo de vida
Operadores
quais so e como operam
precedncia e associatividade
18
Tipos Primitivos
No so considerados objetos
Alocados na pilha
Possuem mesmo tamanho e
caractersticas,
independentemente de plataforma
8 tipos:
boolean, char
byte, short, int, long
float, double
Tipos, Vars e Ops 19
Tipos Inteiros

Tipo Tamanho
Alcance
Byte 8 bits -128 at 127
short 16 bits -32.768 at 32.767
int 32 bits -2.147.483.648 at 2.147.483.647
long 64 bits -9223372036854775808 at 9223372036854

Todos tipos possuem sinal


Cuidado com valores atribudos

Tipos, Vars e Ops 20


Tipos Inteiros - Exemplo
// precisaoByte.java
public class precisaoByte {

public static void main(String[] args) {


byte i = 127;
System.out.println("i: " + i);
i++;
System.out.println("i: " + i);
}
}

Sada:
i: 127
i: -128
Tipos, Vars e Ops 21
Tipos Ponto Flutuante
Tipo Tamanho Alcance
float 4 bytes 3.402823 E+38F
aprox.
double8 bytes 1.79769313486231 E+308
aprox.

Seguem padro IEEE754


Notao Cientfica
1.44E6 (= 1.44 x 106 = 1,440,000) ou
3.4254e-2 (= 3.4254 x 10-2 = 0.034254)
Preciso
float: at 7 casas decimais
double: at 15 casas decimais
Tipos, Vars e Ops 22
Tipos Ponto Flutuante -
Exemplo
public class precisaoFloat {

public static void main(String[] args) {


double d = 1.23000087513252000092785E+2;
System.out.println (d);
float f = (float)d;
System.out.println (f);
}
}

Sada:
123.000087513252
123.000084

Tipos, Vars e Ops 23


Tipo Caractere

Representao de Caracteres
Individuais
Tamanho de 16 bits
Tabela Unicode
cdigo numrico sem sinal (at 32768
caracteres)
Internacionalizao
compatvel com a tabela ASCII
Tipos, Vars e Ops 24
Tipo Caractere
Tabela Unicode
compatvel com a tabela ASCII
valor literal de um caractere
limitado por aspas simples: a
caracteres especiais e sem
representao visual
precedidos por barra invertida: \n, \
uso de escapes
\u0061 \141 a
uso como identificador (s escape
\uxxxx)
Tipos, Vars
inte Ops
b\u0061 = 10; // int ba = 10; 25
Tipo Caractere
Tabela Unicode
cuidado com uso de escapes
String s = \;
String s1 = \u0022; //
String s2 = \u005c\u0022 // \
caracteres especiais
Representao Significado
\n Pula linha (newline ou linefeed)
\r Retorno de carro (carriage return)
\b Retrocesso (backspace)
\t Tabulao (horizontal tabulation)
\f Nova pgina (formfeed)
Tipos, Vars e Ops 26
\ Apstrofe
Tipo Caractere - Exemplo I
public class charTeste {

public static void main(String[] args) {


char i = 'a';
System.out.println("i: " + i);
i++;
System.out.println("i: " + i);
i++;
System.out.println("i: " + i);
i = (char)(i * 1.2);
System.out.println("i: " + i);
int j = i;
System.out.println("j: " + j);
}
}
Sada: i: a
i: b
i: c
i: v
i: 118

Tipos, Vars e Ops 27


Tipo Caractere - Exemplo II
public class charTeste1 {

public static void main(String[] args) {


char i = 'a';
int j = i;
System.out.println("i: " + i);
System.out.println("j: " + j);
i = 97;
j = i;
System.out.println("i: " + i);
System.out.println("j: " + j);
i = '\u0061';
j = i;
System.out.println("i: " + i);
System.out.println("j: " + j);
i = '\141';
j = i;
}
}

Tipos, Vars e Ops 28


Tipo Booleano
Valores
true
false
Condies devem ser tipos
booleanos
No h equivalncia com inteiros

Tipos, Vars e Ops 29


Tipo Booleano - Exemplo
public class testeInvalido {

public static void main(String[] args) {


int boolInt = 1;
boolean bool = true;

if (bool) System.out.println( bool); // imprime true


if (boolInt) // ERRO: S valores booleanos!
{
System.out.println("Ol Mundo!");
}
while (boolInt = 5) // ERRO: s expresses booleanas!
{
System.out.println("Isto um teste")
}
}
}

Tipos, Vars e Ops 30


Declarao de Variveis
Identificadores
caracteres alfabticos e numricos
iniciados por letra ou _ ou $
podem ser de qualquer tamanho
somente diferencia os 32 primeiros
caracteres
diferencia letras maisculas e
minsculas
Exemplos:
a total x2 $mine
Tipos, _especial
Vars e Ops TOT Total ExpData
31
Palavras Reservadas
abstract continue finally interface
public this
throw boolean default float
long protected
return throws break do
for
native short transient byte
double
if new static true
case
else implements null super
try
catch extends import package switch
void char false instanceof private
Tipos, Vars e Ops 32
while class final int
Declarao de Variveis
Formato
Tipo seguido por lista de identificadores
Trs tipos
instncia, classe e local
Inicializao
pode ser feita na declarao
necessrio inicializar varivel local antes
de usar valor
variveis de classe e instncia so
inicializadas automaticamente

Tipos, Vars e Ops 33


Declarao de Variveis

Pode ser feita em qualquer ponto


do programa
Visibilidade
a partir de onde foi declarada
visvel nos blocos internos
blocos delimitados por chaves: { e }
no pode haver variveis com mesmo
nome no mesmo escopo
Tipos, Vars e Ops 34
Variveis - Exemplo I
public class variavel {

public static int c = 10; // varivel de classe


public int i; // varivel de instncia

public int func()


{
int n = 5; // varivel local
c++;
i = 2*n*c;
int z;
if (i < 50) z = 10;
z *= 10;
return (i + c);
}
}

Tipos, Vars e Ops 35


Variveis - Exemplo II
public class testaVisibilidade {

public static void main(String[] args) {


int x = 10; // definio da varivel x
int y = 100; // definio da varivel y
while (x < 100)
{
int z = 0; // vlido: z visvel apenas neste bloco
int y = x; // invlido: redefinio da varivel y
x++; // vlido: x tambm visvel neste bloco
}
}
}

Tipos, Vars e Ops 36


Converses entre Tipos
Numricos
Pode misturar tipos
Se algum dos operandos for do tipo double,
ento o outro operando ser convertido em um
double
Caso contrrio, se algum dos operandos for do
tipo float, o outro operando ser convertido
em um float
Caso contrrio, se algum dos operandos for do
tipo long, o outro operando ser convertido em
um long
forma anloga para os tipos inteiros: int, short
Tipos,eVars
bytee Ops 37
Converses entre Tipos
Numricos
Converses onde pode haver perda de
informao devem ser feitas
explicitamente atravs do operador de
cast
Promoo
Ocorre quando so feitas operaes com
tipos inteiros (byte, short e char) menores
que int
Resultados das operaes so do tipo int
Racional: maoir probabilidade de
ocorrncia de overflow nestes tipos, uma
vez que o intervalo de valores pequeno
Tipos, Vars e Ops 38
Converses Numricas -
Exemplo I
public class testaConversoes {
static public void main (String [] args)
{
char c = 'a';
System.out.println("c: " + c);
int i = c; // converso explcita desnecessria
System.out.println("i: " + i);
float f = c; // converso explcita desnecessria
System.out.println("f: " + f);
int j = 101;
System.out.println("j: " + j);
char d = (char)j; // converso explcita obrigatria
System.out.println("d: " + d);
boolean b = true;
int k = (int)b; // ERRO: Os tipos so incompatveis
}
}

Tipos, Vars e Ops 39


Converses Numricas -
Exemplo II
public class testaConversoesI {
static public void main (String [] args)
{
double x = 9.997;
int nx = (int)x;
System.out.println(" nx: " + nx);
nx = (int)Math.round(x);
System.out.println("nx: " + nx);
}
}

Tipos, Vars e Ops 40


Promoo

void testeShort(short x, short y) {


x = (short)(x * y); // converso obrigatria
x = (short)(x / y); // converso obrigatria
x = (short)(x % y); // converso obrigatria
x = (short)(x + y); // converso obrigatria
x = (short)(x - y); // converso obrigatria
x++; // converso desnecessria
x--; // converso desnecessria
}

Tipos, Vars e Ops 41


Variveis Final ou
Constantes
public class Constantes {
public static final double G = 9.81; // constante
static public void main (String [] args)
{
final double CM_POR_POLEGADA = 2.54; // constante
double larguraPalel = 8.5;
double alturaPapel = 11;
System.out.println(G + " metros por segundo " +
"ao quadrado");
System.out.println("Tamanho em centimetros: " +
(larguraPalel * CM_POR_POLEGADA) + " por " +
(alturaPapel * CM_POR_POLEGADA));
}
}

Tipos, Vars e Ops 42


Comentrios
Trs tipos
resto de linha //
mltiplas linhas /* */
gerao de documentao /** */
uso de javadoc
gera pginas html no padro fornecido no
JDK
comentrios imediatamente antes do
elemento
uso de tags html
formatao do texto, imagens, links, tabelas
tags
Tipos, Vars e Opsespeciais javadoc @ 43
Comentrios
/** Comentario de classe
* Classe destinada ao armazenamento de arquivos
* ou diretrios.
* <p> Pode ser usada para armazenar rvores de
* diretrios.
* @author Carlos da Silva
* @see java.io.File
*/
public class FileData {
/** Comentario de atributo
* Essa variavel e inutil
*/
public int i = 10; // inutil
/** Comentario de metodo
* Construtor
* @param filename nome do arquivo
*/
public FileData(String filename) {
/* comentario de multiplas linhas
nao farao parte da documentacao gerada pelo
javadoc */
}
}
Tipos, Vars e Ops 44
Comentrios
Gerao de documentao
javadoc FileData.java
Espaos e *s iniciais so descartados
Tags javadoc
@see
@author
@version
@param
@return
@exception
@deprecated
Tipos, Vars e Ops 45
Operadores Aritmticos
Operador Significado Exemplo
+ Adio a+b
- Subtrao a-b
* Multiplicao a*b
/ Diviso a/b
% Resto da diviso inteira a % b
- Sinal negativo (- unrio)-a
+ Sinal positivo (+ unrio)+a
++ Incremento unrio ++a ou a++
-- Decremento unrio --a ou a--

Tipos, Vars e Ops 46


Operadores Aritmticos
public class Aritmetica {
public static void main ( String[] args)
{
short x = 6;
int y = 4;
float a = 12.5;
float b = 7;

System.out.println ( "x " + x + ", y " + y );


System.out.println ( "x + y = " + (x + y) );
System.out.println ( "x - y = " + (x - y) );
System.out.println ( "x / y = " + (x / y) );
System.out.println ( "x % y = " + ( x % y ) );
System.out.println ( "a " + a + ", b " + b );
System.out.println ( " a / b = " + ( a / b ) );
a = x / y;
System.out.println ( " a = " + a );
}
}

Tipos, Vars e Ops 47


Operadores Relacionais
public class Relacional {
static public void main (String[] args)
{
int a = 15;
int b = 12;

System.out.println("a = " + a);


System.out.println("b = " + b);

System.out.println("a == b -> " + (a == b));


System.out.println("a != b -> " + (a != b));
System.out.println("a < b -> " + (a < b));
System.out.println("a > b -> " + (a > b));
System.out.println("a <= b -> " + (a <= b));
System.out.println("a >= b -> " + (a >= b));
System.out.println("a = b -> " + (a = b));
}
}

Tipos, Vars e Ops 48


Operadores Lgicos
public class Logico {
static public void main (String[] args)
{
System.out.println("True & True = " + (true & true) );
System.out.println("True && True = " + (true && true) );
System.out.println("True & False = " + (true & false) );
System.out.println("True && False = " +(true && false) );
System.out.println("True | True = " + (true | true) );
System.out.println("True || True = " + (true || true) );
System.out.println("True | False = " + (true & false) );
System.out.println("True || False = " + (true & false) );
System.out.println("Not True = " + (!true) );
System.out.println("Not False = " + (!false) );
}
}

Tipos, Vars e Ops 49


Operadores de Atribuio
Bsico
int x = 5; // inicializacao
x = x + 2; // atribuicao
x = y = z = 7;// encadeada
Compostos
Expresso Significado
x += y x = x + y
x -= y x = x y
x *= y x = x * y
x /= y x = x / y

Tipos, Vars e Ops 50


Operadores de Atribuio
Incremento
int x, y, z;
x = 42;
y = x++;
z = ++x;
x = ++z + z;
Decremento
int x, y, z;
x = 42;
y = x--;
z = --x;
Tipos, Vars e Ops 51
x = z-- + z;
Operador Ternrio
Formato
<expresso_booleana> ? <valor_1> :
<valor_2>

Exemplo
public class ternario {
static public void main (String[] args)
{
int i = 7;
int j = i < 10 ? (2*i) : (i); // faz j = 2*i
System.out.println(i: + i); // i: 7
System.out.println(j: + j); // j: 14
}
}

Tipos, Vars e Ops 52


Avaliao de Expresses
Precedncia de Operadores
tabela de precedncias
c = a + b * c;
Associatividade de Operadores
esquerda para direita, exceto atribuio
c = a * b * c;
c = a = b = 10;
Associatividade de Operandos
esquerda para direita
c = b++ + b;
Tipos, Vars e Ops 53
Precedncia de
Nvel
Operadores
Operadores
1 .(seleo) [] ()
2 ++ -- ~ instanceof new (unrio)
3 * / %
4 + -
5 << >> >>>
6 < > <= >=
7 == !=
8 &
9 ^
10 |
11 &&
12 ||
13 ?:
14 = += -= *= /=
15 ,

Tipos, Vars e Ops 54


Tipos Compostos
Objetos
nico tipo composto
vetores, strings, matrizes, registros e
arquivos so objetos
alocados no heap
variveis primitivas possuem tipo, objetos
possuem classe
Exemplo
class coordenadas {
public int x;
public int y;
public int z;
} e Ops
Tipos, Vars 55
Tipos Compostos
Tipos Primitivos
alocao na pilha
atribuio por cpia
Objetos
alocao no monte
atribuio por referncia
C D C D

O b j1 O b j2 O b j2

Tipos, Vars e Ops 56


Atribuio de Tipos
Compostos
class Numero {
int i;
}
public class Atribuicao {
public static void main(String[] args) {
Numero n1 = new Numero();
Numero n2 = new Numero();
n1.i = 9;
n2.i = 47;
System.out.println("1: n1.i: " + n1.i +", n2.i: " +
n2.i);
n1 = n2;
System.out.println("2: n1.i: " + n1.i +", n2.i: " +
n2.i);
n1.i = 27;
System.out.println("3: n1.i: " + n1.i +", n2.i: " +
n2.i);
}
}

Tipos, Vars e Ops 57


Objetos Especiais - Strings
public class testaString {
public static void main (String[] args) {
int nascido = 1965;
String s = "Fernando ";
s += "Silva";
System.out.println (s);
s = "Fabio";
s += " Andrade";
System.out.println (s);
s = s + " nasceu em " + nascido + " e tem " +
(2001 - nascido) + " anos";
System.out.println (s);
}
}

Tipos, Vars e Ops 58


Exerccios
1. Faa um programa que imprima um valor de cada tipo primitivo.
2. Inclua comentrios no arquivo do segundo exerccio e gere a docume
javadoc.
3. Crie um arquivo para a classe abaixo. Compile e execute-o.

class shortExplo
{
public static void main ( String[] args )
{
short valor = 32;
System.out.println(valor + " um short!");
}
}

Edite o programa alterando 32 para 356. Compile e execute. Repita


agora com 35000. Altere novamente o programa modificando o tipo d
int. Compile e execute. Repita o procedimento alterando o tipo de va
Substitua tambm 35000 por um valor fora dos limites de double (vo
notao cientfica para isso). O que acontece?

Tipos, Vars e Ops 59


Exerccios
4. Crie um arquivo para a classe abaixo. Compile e execute-o.

class charExplo
{
public static void main ( String[] args )
{
char ch = 'A' ;
System.out.println("Um caracter: " + ch );
}
}

Mude 'A' no programa por 'AA' e compile-o. Agore mude 'AA' por
novamente.

Tipos, Vars e Ops 60


Exerccios
5. Crie um arquivo para a classe abaixo e o compile. Explique o q
correo devida e execute-o.

class byteExplo
{
public static void main ( String[] args )
{
byte a, b, c;
b = 10;
c = 15;
a = b + c;
System.out.println("Um byte: " + a );
}
}

Tipos, Vars e Ops 61


Exerccios
class incrExplo
{
public static void main ( String[] args )
{
int a, b, c;
b = c = 10;
a = b++ + b++;
System.out.println("valor de a = " + a );
System.out.println("valor de b = " + b );
a = ++c + ++c;
System.out.println("valor de a = " + a );
System.out.println("valor de c = " + c );
a = 10;
b = 5;
boolean x = a > b || b++ > 3;
System.out.println("valor de x = " + x );
System.out.println("valor de b = " + b );
a = b++ + b;
System.out.println("valor de a = " + a );
System.out.println("valor de b = " + b );
}
}

Tipos, Vars e Ops 62


Estruturas de Controle e
Programao Bsica
Repeties
Definidas
Condicionais
Desvios
Condicionais
Incondicionais
Modularizao
Tratamento de Excees
Entrada e Sada Padro
63
Comandos ou Diretivas

Sequenciais
Separadas por ponto e vrgula ( ; )
Bloco { } permite agrupar diretivas

Contr e Prog Bas 64


for
Formato
for (inicializao; condio de execuo;
incremento/decremento) diretiva;

Todos campos opcionais


Super comando de repetio
definida
condicional

Mltiplas
Contr e Prog Basvariveis de controle 65
for - Estrutura Geral

in ic ia liz a o

v e r d a d e ir o
e x p re s s o
d ir e tiv a
l g ic a

f a ls o
in c r e m e n t o /
d e c re m e n to

Contr e Prog Bas 66


for
public class exemploFor {
public static void main (String[] args) {
int j;
for (j=0; j<10; j++)
{
System.out.println( + j);
}
for(int i = 1, j = i + 10; i < 5; i++, j = i * 2)
{
System.out.println("i= " + i + " j= " + j);
}
}
}

Contr e Prog Bas 67


if - Estrutura Geral

e x p re s s o f a ls o v e r d a d e ir o e x p re s s o f a ls o
l g ic a l g ic a

v e r d a d e ir o

d ir e t iv a 1 d ir e t iv a 1 d ir e tiv a 2

Contr e Prog Bas 68


if
public class exemploIf {
public static void main (String[] args) {
if (args.length > 0)
{
for (int j=0; j<Integer.parseInt(args[0]); j++)
{
System.out.print("" + j + " ");
}
System.out.println("\nFim da Contagem");
}
System.out.println("Fim do Programa");
}
}

Contr e Prog Bas 69


switch
Formato
switch (expresso_ordinal){
case ordinal1: diretiva3;
break;
case ordinal2: diretiva2;
break;
default: diretiva_default;
}
uso de break
default opcional
Contr e Prog Bas 70
switch

e x p re s s o
l g ic a

caso 1 caso 2 d e fa u lt

d ir e tiv a 1 d ir e tiv a 2 d ir e tiv a n

Contr e Prog Bas 71


switch
public class exemploSwitch {
public static void main (String[] args) {
if ( args.length > 0){
switch( args[0]. charAt(0)) {
case 'a':
case 'A': System.out.println(" Vogal A");
break;
case 'e':
case 'E': System.out.println(" Vogal E");
break;
case ' i':
case 'I': System.out.println(" Vogal I");
break;
default: System.out.println("No uma vogal");
}
} else {
System.out.println("No foi fornecido argumento");
}
}
}

Contr e Prog Bas 72


while e do-while

e x p re s s o fa ls o
l g ic a
d ir e tiv a

v e r d a d e ir o
v e r d a d e ir o

d ir e tiv a
e x p re s s o
l g ic a

fa ls o

while do-while

Contr e Prog Bas 73


while
public class exemploWhile {
public static void main (String args[]) {
int j = 10;
while (j > Integer.parseInt( args[0]))
{
System.out.println (""+j);
j--;
}
}
}

Contr e Prog Bas 74


do-while
public class exemploDoWhile {
public static void main (String[] args) {
int min = Integer.parseInt( args[0]);
int max = Integer.parseInt( args[1]);
do {
System.out.println ("" + min + " < " + max);
min++; max--;
} while (min < max);
System.out.println(""+ min +"<"+ max +"condicao
invalida");
}
}

Contr e Prog Bas 75


Java Orientada a Objetos

Objetos e Classes

Encapsulamento de dados e operaes

Subtipos e Herana

Polimorfismo

Ligaes dinmicas (dynamic binding)

Criao e remoo dinmica de objetos

alocao e liberao automtica de


memria
Parte 2
Programao Orientada a
Objetos

77
Histrico
Linguagem SIMULA (anos 60), derivada do ALGOL e
desenvolvida no Centro Noruegus de Computao,
por Kristen Nygaard e Ole-Johan Dahl.
A SIMULA era utilizada para simulaes e foi a
pioneira na utilizao de classes e subclasses,
semelhantes s usadas atualmente em POO.
SMALLTALK (anos 70), foi a primeira linguagem
autntica orientada a objetos. Foi desenvolvida por
cientistas do Xerox Palo Alto Research Center (Xerox
PARC).
Cada elemento do SMALLTALK tratado como sendo
um objeto. Esta linguagem puramente OO.

78
Histrico
C++, dos laboratrios da AT&T Bell, criada por
Bjarne Stroustrup, uma expanso da linguagem C,
muito popular e conhecida.
Suporta POO, mantendo as caractersticas do C
tradicional.
Fcil transio do C para o C++.

79
Linguagem Java
uma linguagem de programao de propsito geral,
orientada a objetos e adequada para a Internet.
Utilizada para o desenvolvimento de qualquer tipo de

software, com sintaxe similar ao C.


Modelo OO baseado em Smalltalk e Simula67

Applets JAVA

A linguagem JAVA foi projetada e implementada por um


pequeno grupo pessoas, coordenado por James Gosling,
na Sun Microsystems em Mountain View, Califrnia, em
1991.

80
Conceitos
Definio: o termo orientao a objetos significa
organizar o mundo real como uma coleo de objetos
que incorporam estrutura de dados e um conjunto
de operaes que manipulam estes dados.

Todas as linguagens orientadas a objetos possuem


trs caractersticas bsicas:
Objetos

Polimorfismo

Herana

81
Objetos
uma entidade lgica que contm dados e cdigo
para manipular esses dados.
Exemplos:

Coisas tangveis o livro A Bblia


Incidente (evento/ocorrncia) a Eleio
Presidencial
Interao (transao/contrato) o dbito de
R$100,00 na conta x do dia
07/11/2002

82
Objetos
Classes:
um tipo de dado, como os j conhecidos, para

declarar variveis.
Uma varivel de uma classe chamada de Objeto.

Definir uma classe no cria um objeto, assim como

um tipo de varivel NO uma varivel.


Variveis de Classe: So os dados declarados em
uma classe
Instncia: Temos uma instncia de uma classe
quando declaramos um objeto a partir de uma classe.
semelhante declarao de uma varivel.

83
Objetos
VARIVEIS DE CLASSE VARIVEIS DE INSTNCIA

DADOS
DADOS

MTODOS
MTODOS

INSTNCIA DE
CLASSE UMA CLASSE
84
Objetos
Objetos interagem e comunicam-se atravs de
mensagens...
...as mensagens identificam os mtodos a serem
executados no objeto receptor

85
Mensagens e Mtodos
Para invocar um mtodo de um objeto, deve-se enviar uma
mensagem para este objeto.
Para enviar uma mensagem deve-se:
identificar o objeto que receber a mensagem

identificar o mtodo que o objeto deve executar

passar os argumentos requeridos pelo mtodo

Um objeto possui:
um estado (definido pelo conjunto de valores dos seus

atributos em determinado instante)


um comportamento (definido pelo conjunto de mtodos

definido na sua interface)


uma identidade nica

86
Abstrao
Focalizar o essencial, ignorar propriedades acidentais

A abstrao deve ser sempre feita com algum


objetivo, porque este determina o que e o que no
importante. 87
Objetos - Encapsulamento
No podemos acessar os dados de um objeto diretamente.
(Fenmeno da caixa preta)
Para acessar suas variveis de instncia, devemos fazer

atravs de mtodos.
No precisamos saber como as variveis de instncia so

armazenadas para poder utiliz-las.


Considere o seguinte trecho de cdigo C:
double d = 0;
d += 2.5;
Como um double representado internamente?
O que acontece quando voc usa o operador +=?
Voc alguma vez se importou com isto?
Voc deveria se preocupar?

88
Objetos - Encapsulamento
Todo o acesso aos dados do objeto feito atravs
da chamada a uma operao (mtodo) da sua
interface
Mudanas na implementao de um objeto, que
preservem a sua interface externa, no afetam o
resto do sistema.
A interface (pblica) de um objeto declara todas as
operaes permitidas (mtodos)

89
Polimorfismo
O Polimorfismo ocorre quando uma
mesma mensagem chegando a
objetos diferentes provoca respostas
diferentes.

90
Polimorfismo

MENSAGEM

OBJETO 1 OBJETO 2

AO 1 AO 2
91
Herana
o processo em que CLASSE BASE
um objeto pode AB
adquirir as
caractersticas de
outro objeto. Caractersticas
Herana Simples: AB Herdadas
AB
um objeto herda as C
caractersticas de D E F
uma nica classe. CLASSES DERIVADAS
Herana Mltipla:
uma objeto herda
caractersticas de
mais de uma classe.
92
Herana
Exemplo:

93
Termos Tcnicos
Relacionados
Ligao Dinmica:
o processo de ligar (link) um programa com suas
bibliotecas durante sua execuo.
Nas linguagens convencionais, a ligao esttica,
isto , todas as conexes ocorrem antes da
execuo do programa.
Na ligao dinmica, as bibliotecas so carregadas e
descarregadas da memria conforme solicitadas
durante a execuo do programa.
No ambiente Windows, essas bibliotecas possuem a
extenso DLL (Dynamic Link Library).

94
Ligao Esttica
*.CPP *.OBJ

FONTE OBJETO

COMPILAO
LINK EXECUTVEL

*.EXE
BIBLIOTECAS
*.OBJ
*.LIB
95
Ligao Dinmica
EXE
FONTE

EXECUTVEL
OU

LIGAO
ESTTICA

DLL DLL

96
Termos Tcnicos
Relacionados
Programao Visual
a maneira de se programar desenhando os

objetos no lugar de descrever seu cdigo.


A Programao Visual est sempre associada

orientao a objetos.
Mtodos Construtores e Destrutores
Mtodos Construtores: alocam dinamicamente na

memria uma instncia de uma classe.


Mtodos Destrutores: retiram a instncia da

memria, liberando-a.
A alocao das instncias dinmica.

97
Mtodos Construtores e
Destrutores
MEMRIA

INSTNCIA
CLASSE DA CLASSE
OBJETO
NA MEMRIA
MTODO
MTODO DESTRUTOR
CONSTRUTOR

98
Termos Tcnicos
Relacionados
Persistncia:
o tempo que um objeto permanece na memria.

Algumas instncias so criadas no incio da


execuo do programa e s so destrudas no final
do programa.
Outras instncias so necessrias apenas por

algum tempo. Quando um objeto no mais


necessrio, ele destrudo e seu espao na
memria liberado. A recuperao do espao
denominada Coleta de Lixo (Garbage Collection).

99
POO x Tcnicas
Tradicionais
Mtodos Procedimentos e
funes
Variveis de Instncia Dados
Mensagens Chamadas de
procedimento e funes
Classes Tipos de Dados
Herana No existe
Chamadas sob controle Chamada sob controle
do sistema do programador

100
Propriedades
As propriedades NO SO variveis de instncia.
As propriedades chamam mtodos que alteram as
variveis de instncia.
Quando atribumos um dado a uma propriedade,
chamado um mtodo SET.
Quando pegamos um dado, chamado um mtodo GET.
Exemplos:

objeto.propriedade = dado =
valor objeto.propriedade
Isto equivale a: Isto equivale a:

objeto.SET_prop(valor) objeto.GET_prop(dado)
101

Vous aimerez peut-être aussi