Você está na página 1de 48

Introduo Programao

Conceitos Bsicos de Orientao a Objetos

Tpicos da Aula
Aprenderemos fundamentos do paradigma orientado a objetos, mas antes veremos o que paradigma
Conceito de paradigma Diferentes paradigmas na computao

Depois veremos o que orientao a objetos


Conceitos de orientao a objetos Programao orientada a objetos x Programao imperativa Estrutura de um programa orientado a objetos em C++ Construtores Criao de objetos Exemplo de aplicao orientada a objetos
2

Paradigmas de Programao
Linguagens de programao so baseadas em vrios conceitos:
Tipos de dados, variveis e armazenamento, controle, abstrao de dados, abstrao procedural, sistema de tipos,etc

Diferentes selees dos conceitos definem o estilo de programao ou Paradigma


Afeta a forma de pensar em como escrever um programa

A forma como estes conceitos so agrupados em uma linguagem de programao definem que paradigma suportado por esta linguagem

Paradigmas de Programao
Podemos encontrar 6 grandes paradigmas suportados pelas linguagens de programao:
Imperativo Uso de comandos, variveis e procedimentos Primeiras linguagens de programao so deste paradigma Ex: Fortran, Pascal, C, etc Orientao a Objetos Uso de classes, objetos, herana, polimorfismo, maior abstrao de dados, encapsulamento (implementao) Evoluo do paradigma imperativo Ex: Smalltalk, C++, Eiffel, Java, C#, etc

Paradigmas de Programao
Funcional Uso de expresses e funes, ausncia de variveis e comandos Ex: ML, Haskell
-- Exemplo em Haskell -- type factorial :: Integer -> Integer -- using recursion factorial 0 = 1 factorial n = n * factorial (n - 1)

Paradigmas de Programao
Lgico Relaes lgicas entre asseres Ex: Prolog, Mercury
/* Exemplo em Prolog */ mother_child(trude, sally). /* fato */ father_child(tom, sally). father_child(tom, erica). sibling(X, Y) :- parent_child(Z, X), parent_child(Z, Y). parent_child(X, Y) :- father_child(X, Y). /* clausula*/ parent_child(X, Y) :- mother_child(X, Y).

entradas

sadas,

?- sibling(sally, erica). Yes

Paradigmas de Programao
Concorrente Execuo concorrente de processos, abstrao de controle de sincronizao (inter-processos, acesso a recursos, etc) Ex: Occam, Java, Concurrent C, etc Scripting Sistema de tipos dinmica, abstrao de processamento de Strings, suporte a interfaces grficas Ex: Python, Java Script, Tcl, HTML

O que Orientao a Objetos?


considerar que tudo um objeto:
Os sistemas so objetos Os dados manipulados e comunicados entre os sistemas so objetos Cada parte de um sistema (sub-sistema) um objeto Os dispositivos eletrnicos so objetos A interface com o usurio um objeto, composto de vrios outros objetos...

Objeto
Podemos definir objeto como uma entidade que possui:
Estado
Caractersticas ou propriedades do objeto

Comportamento
Operaes que o objeto pode realizar

O comportamento pode examinar ou alterar o estado de um objeto

Objeto DVD
As operaes que o DVD pode executar

O estado atual do DVD; o que ele est fazendo...

Fonte: http://www.amazon.com

10

Objeto Conta Bancria

Crdito

Saldo

Nmero

Comportamento

875,32

21.342-7

O estado atual da conta

Dbito

Operaes que uma conta pode executar

11

Estados do Objeto Conta


Comportamento neste caso mudou o estado do objeto conta
Crdito(20)
Crdito

Crdito

Crdito

Crdito

Saldo

Saldo

Nmero

Nmero

Saldo

Saldo

Nmero

Nmero

875,32

875,32

21.342-7

21.342-7

895,32

875,32

21.342-7

21.342-7

Dbito

Dbito

12

Classe
Classe um agrupamento de objetos que tm propriedades comuns e podem realizar as mesmas operaes uma definio que descreve como objetos pertencentes classe so estruturados internamente (quais propriedades e operaes o objeto possui) Classe um conceito e o objeto uma instncia deste conceito Portanto, podemos ter vrios objetos pertencentes a mesma classe
13

Classe x Objeto
Mltiplos objetos podem ser criados partir da mesma classe Classe Conta
Saldo Nmero

Crdito

Objeto conta1
Crdito

Dbito

Objeto conta2
Crdito

Crdito
Nmero Saldo

Crdito
Nmero

Saldo

Saldo

Nmero

Saldo

Nmero

1000,32 11.056-x

875,32

875,32

21.342-7

875,32

21.342-7

21.342-7
14

Dbito

Dbito

Classe e Tipo
Tipo um conjunto de valores relacionados que so capazes de realizar as mesmas operaes
Ex: inteiro, caractere, Conta, Banco, etc

Uma classe define um tipo: o tipo cujos elementos so objetos com as mesmas propriedades e comportamento

15

Atributo e Mtodo (1)


Atributo representa alguma propriedade do objeto O conjunto de atributos de um objeto determina o estado do objeto Um atributo pode conter um valor simples tal como um nmero real ou at outro objeto Mtodo representa uma operao que um objeto pode fazer O conjunto de mtodos de um objeto determina o comportamento do objeto
16

Atributo e Mtodo (2)

Crdito

Saldo

Nmero

Comportamento

875,32

21.342-7

Atributos da conta
Dbito

Mtodos de uma conta

17

Relaes entre Objetos


Geralmente, um software construdo a partir de vrios objetos (classes) que se relacionam As relaes de Cliente e Herana so essenciais para a construo de programas Classe B Cliente de classe A, se todo objeto de tipo B contiver informao sobre um ou mais objetos do tipo A Classe B Herdeira de classe A, se B representa uma verso especializada de A
Mtodos e os atributos da classe A se tornam, tambm, parte da classe B Caractersticas e comportamento de A so passadas para B

18

Relao Cliente
Objeto do tipo Banco tm vrios objetos do tipo Conta Banco cliente de Conta
Objeto Banco1
Cria nova Conta

Objeto Conta1
Crdito

Crdito

Crdito

Nome

Banco doSaldo Brasil

Conta Conta Conta Nmero

Saldo

Saldo

Nmero

Nmero

875,32

Conta1 Conta1 Conta1 21.342-7

895,32

875,32

21.342-7

21.342-7

Transferncia

Dbito

19

Relao Herana
Classe Poupana uma verso especializada de Conta Mtodos e atributos so herdados Classe Conta
Saldo Nmero

Crdito

Dbito

Classe Poupana
Saldo Nmero Juros

Crdito

Dbito

20

Utilizando OO para Desenvolver Programas


Desenvolvimento de uma soluo se torna mais fcil quando quebramos esta soluo em mdulos gerenciveis Quando estamos programando, podemos desenvolver mdulos separados, onde cada um responsvel por uma certa parte da soluo
Programao Modular

OO facilita modular

programao

Mdulos so as classes e objetos


21

Algumas Consideraes sobre OO


Orientao a Objetos Modularidade
Reusabilidade Extensibilidade

Classe uma entidade que combina 2 conceitos: Mdulo e Tipo


Mdulo um conceito sinttico, pois a decomposio do sistema em mdulos afeta somente a forma como o programa escrito, no a funcionalidade dele Tipo um conceito semntico, pois o tipo influencia diretamente a execuo do sistema, definindo a forma dos objetos que so criados e manipulados pelo sistema em tempo de execuo

22

OO e Linguagens de Programao
Linguagens OO tm em objetos e classes seus elementos fundamentais para construo de programas
Estruturas da linguagem permitem mapeamento direto dos conceitos de OO

Porm, possvel fazer um programa OO em uma linguagem no OO


possvel, tambm, fazer um programa que no seja OO em uma linguagem OO

Conceito de Orientao a Objetos independente da linguagem de programao


23

Linguagem C++
Criada por Bjarne Stroustrup em 1983 Pode ser vista quase como uma extenso da linguagem C para dar suporte a OO
Embora quase tudo escrito em C seja compatvel com C++, certos comandos podem ter comportamento diferente em C++

D suporte a vrios conceitos de OO:


Classe, Herana,Polimorfismo, Encapsulamento

Ainda oferece suporte a tratamento de excees e tipos genricos Sintaxe da linguagem Java foi inspirada em C++
24

Um Programa Imperativo...
Contm
Uma funo principal, por onde comea a execuo do programa

Vrias funes auxiliares, para modularizar, dividir o cdigo em partes Importao de bibliotecas de funes

Pode ainda conter:


Definio de tipos estruturados

Um Programa Orientado a Objetos ...


Tem a classe fundamental : como a sua construo

Um programa constitudo de uma ou mais classes Que podem ter sido importadas de uma biblioteca de classes
Uma classe contm um ou mais atributos e mtodos

Um mtodo composto de instrues

26

Ao Invs de Estruturas, Classes!


Classe
Estrutura Funo 1
Funo 2 Funo 3
Define um tipo, com funes que operam sobre este tipo

Estrutura

Funo 1
Funo 2

Funo 3

Programao Imperativa x Programao OO


Programao Imperativa tem como elementos principais os procedimentos (funes) Programao OO tem como elementos principais as classes
Estrutura + funes = classe

Programao OO ainda utiliza :


Herana Encapsulamento Polimorfismo

Veremos depois!

28

Implementando o Tipo Conta com Programao Imperativa


struct Conta{ double saldo; char numero[11]; char agencia[11]; };
Primeiro passo definir um tipo estruturado Conta

29

Implementando as Funes do Tipo Conta


Passa-se estrutura (ou endereo de estrutura) como parmetro void creditar(struct Conta *c ,double v){ c->saldo = c->saldo + v; }

Depois se define as funes que operam sobre o tipo Conta


creditar debitar getSaldo criaConta

30

Implementando as Funes do Tipo Conta


void debitar(struct Conta *c,double v){ if (v <= c->saldo) c->saldo = c->saldo - v; }

double getSaldo(struct Conta *c){ return c->saldo; }

31

Implementando as Funes do Tipo Conta


struct Conta* criaConta(char *num, char* ag) { struct Conta *retorno; retorno = (struct Conta *) malloc (sizeof(struct Conta)); if (retorno == NULL){ printf(Erro na alocao de memria!) } else { strcpy(retorno->numero, num); strcpy(retorno->agencia, ag); retorno->saldo = 0; } return retorno; }

Alocando dinamicamente uma estrutura

32

Usando o Tipo Conta em Programao Imperativa


int main() { struct Conta *conta1; conta1 = criaConta(1234-5,007-x); if (conta1 == NULL){ printf(Erro na alocao de memria!) } else { creditar(conta1,300); printf(Saldo da conta = %lf\n,getSaldo(conta1)); debitar(conta1,200); printf(Saldo da conta = %lf\n,getSaldo(conta1)); } return 0; }

33

Implementando o Tipo Conta com Programao OO (C++)


class Conta{ Atributos private: double saldo; char numero[11]; Mtodos char agencia[11]; public: void creditar(double v); void debitar(double v); double getSaldo(); Conta(char* num, char* ag); }; Atributos e Mtodos Construtor

Primeiro passo definir a classe Conta


34

Implementando os Mtodos do Tipo Conta


Indica que mtodo faz parte da classe Conta void Conta::creditar(double v){ saldo = saldo + v; } saldo um atributo que foi definido na classe Conta

No precisa passar objeto como parmetro!


35

Implementando os Mtodos do Tipo Conta


void Conta::debitar(double v){ if (v <= saldo) saldo = saldo - v; }

double Conta::getSaldo(){ return saldo; }

36

Construtor
Tipo especial de mtodo que chamado no ato de criao de um objeto da classe desejada
Importante para fazer algumas inicializaes no objeto

Uma classe pode ter mais de um construtor


O que diferencia um construtor do outro a ordem e/ou tipo e/ou quantidade de parmetros

Em C++, deve ter o mesmo nome da classe No possui tipo de retorno No obrigatrio definir um construtor
Existe em C++ um construtor default sem parmetros

37

Implementando o Construtor do Tipo Conta


Conta::Conta(char *num, char* ag) { strcpy(numero, num); strcpy(agencia, ag); saldo = 0; }

38

Usando o Tipo Conta em Programao OO


#include <iostream> uma classe em tempo de using namespace std; execuo (dinamicamente) int main() { Conta *c; c = new Conta(1234-5,007-x); Comando para if (c == NULL){ imprimir na printf(Erro na criao do objeto!) tela } else { c->creditar(300); cout<<"Conta tem saldo = " << c->getSaldo() << endl; c->debitar(200); cout<<"Conta tem saldo = " << c->getSaldo() << endl; } return 0; }

Comando para criar objeto de

Para chamar mtodo a partir de uma referncia para um objeto

39

Criao Dinmica de Objetos


Em linguagens OO, escrevemos programas utilizando objetos Mas, primeiro, temos que cri-los... Para criar um objeto em C++ dinamicamente utilizamos o comando new

new Conta(...);
Palavra reservada ordenando a criao de um objeto Construtor do objeto a ser criado
40

Avaliao do operador new


Para avaliar uma expresso do tipo

o computador...

new NomeDaClasse();

Cria um objeto da classe NomeDaClasse e armazena na sua memria Inicializa os atributos deste objeto usando o construtor desta classe Devolve como resultado da avaliao uma referncia (endereo da memria) para o objeto criado

41

Criando um objeto dinamicamente...


new Conta(12-3,11-2);

12-3

11-2

12-3

11-2

id275

1. Cria o objeto na memria

2. Inicializa o objeto

3. Associa um endereo ao objeto

4. Devolve o endereo como resultado da avaliao

42

Construtores e new
Podemos ter mais de um construtor para um determinado objeto A escolha do construtor para inicializar os atributos determinada pela lista de argumentos, entre parnteses

new NomeDaClasse(argumentos)
O nmero, ordem e tipos dos argumentos determina o construtor

43

Referncias para objetos


Todo acesso e manipulao feito indiretamente, atravs de uma referncia (endereo) para o objeto Quando declaramos uma varivel do tipo de um determinado objeto, ela no armazena o objeto e sim uma referncia para um objeto daquele tipo
Conta* conta1 = new Conta(12-3,11-2); A referncia para o objeto O objeto

conta1 armazena este valor

id305 A referncia funciona como a identidade do objeto

44

Referncias e identidade de um objeto

id305

12-3

11-2

Objetos diferentes, mas com o mesmo contedo (clones)

id309

12-3

11-2

id312

11-5

12-4

Referncias diferentes objetos diferentes


45

Consideraes sobre Criao de Objetos


Os valores dos atributos (estado) de um objeto podem mudar durante a execuo de um programa, mas isso no afeta a identidade do objeto O ato de criar um objeto chamado de instanciar um objeto de uma determinada classe

46

Criao Esttica de Objetos


C++ permite tambm a criao esttica (em tempo de compilao) de objetos No ato da declarao de uma varivel do tipo de uma classe, objeto criado
Na declarao deve-se passar argumentos do construtor

Conta c(12-3,11-2);
Tipo da varivel c Conta Argumentos do construtor
47

Usando Criao Esttica de Objetos do Tipo Conta


#include <iostream> objeto em tempo de compilao using namespace std; int main() { Conta c(1234-5,007-x); c.creditar(300); cout<<"Conta tem saldo = " << c.getSaldo() << endl; c.debitar(200); cout<<"Conta tem saldo = " << c.getSaldo() << endl; return 0; }

Declarao para instanciar

Utiliza-se operador . para utilizar os mtodos do objeto criado estaticamente


48

Você também pode gostar