• Nenhum resultado encontrado

Introdução à Programação

N/A
N/A
Protected

Academic year: 2022

Share "Introdução à Programação"

Copied!
48
0
0

Texto

(1)

Introdução à Programação

Conceitos Básicos de

Orientação a Objetos

(2)

2

Tópicos da Aula

Aprenderemos fundamentos do paradigma orientado a objetos, mas antes veremos o que é paradigma

Conceito de paradigma

Diferentes paradigmas na computação

Depois veremos o que é orientação a objetos

Conceitos de orientação a objetos

Programação orientada a objetos x Programação imperativa Estrutura de um programa orientado a objetos em C++

Construtores

Criação de objetos

Exemplo de aplicação orientada a objetos

(3)

Paradigmas de Programação

Linguagens de programação são baseadas em vários conceitos:

Tipos de dados, variáveis e armazenamento, controle, abstração de dados, abstração procedural, sistema de tipos,etc

Diferentes seleções dos conceitos definem o estilo de programação ou Paradigma

Afeta a forma de pensar em como escrever um programa A forma como estes conceitos são agrupados em uma linguagem de programação definem que paradigma é suportado por esta linguagem

(4)

Paradigmas de Programação

Podemos encontrar 6 grandes paradigmas suportados pelas linguagens de programação:

Imperativo

Uso de comandos, variáveis e procedimentos

Primeiras linguagens de programação são deste paradigma

Ex: Fortran, Pascal, C, etc Orientação a Objetos

Uso de classes, objetos, herança, polimorfismo, maior abstração de dados, encapsulamento (implementação)

Evolução do paradigma imperativo

Ex: Smalltalk, C++, Eiffel, Java, C#, etc

(5)

Paradigmas de Programação

Funcional

Uso de expressões e funções, ausência de variáveis e comandos

Ex: ML, Haskell

-- Exemplo em Haskell -- type

factorial :: Integer -> Integer -- using recursion

factorial 0 = 1

factorial n = n * factorial (n - 1)

(6)

Paradigmas de Programação

Lógico

Relações lógicas entre entradas e saídas, asserções

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).

?- sibling(sally, erica).

Yes

(7)

Paradigmas de Programação

Concorrente

Execução concorrente de processos, abstração de controle de sincronização (inter-processos, acesso a recursos, etc)

Ex: Occam, Java, Concurrent C, etc Scripting

Sistema de tipos dinâmica, abstração de processamento de Strings, suporte a interfaces gráficas

Ex: Python, Java Script, Tcl

(8)

O que é Orientação a Objetos?

É considerar que tudo é um objeto:

Os sistemas são objetos

Os dados manipulados e comunicados entre os sistemas são objetos

Cada parte de um sistema (sub-sistema) é um objeto Os dispositivos eletrônicos são objetos

A interface com o usuário é um objeto, composto de vários outros objetos...

8

(9)

Objeto

Podemos definir objeto como uma entidade que possui:

Estado

Características ou propriedades do objeto

Comportamento

Operações que o objeto pode realizar

O comportamento pode examinar ou alterar o

estado de um objeto

(10)

Objeto DVD

Fonte: http://www.amazon.com

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

As operações que o DVD pode executar

10

(11)

Comportamento

Número Saldo

21.342-7 875,32

Crédito

Débito

Operações que uma

conta pode executar O estado

atual da conta

Objeto Conta Bancária

(12)

Estados do Objeto Conta

Número Saldo

21.342-7 875,32

Crédito

Número Saldo

21.342-7 875,32

Crédito

Débito

Crédito(20)

12 Número

Saldo

21.342-7 875,32

Crédito

Número Saldo

21.342-7 895,32

Crédito

Débito

Comportamento neste caso mudou o estado do

objeto conta

(13)

Classe

Classe é um agrupamento de objetos que têm propriedades comuns e podem realizar as mesmas operações

É uma definição que descreve como objetos pertencentes à classe são estruturados internamente (quais propriedades e operações o objeto possui)

Classe é um conceito e o objeto é uma instância deste conceito

Portanto, podemos ter vários objetos

pertencentes a mesma classe

(14)

Classe x Objeto

Número Saldo

21.342-7 875,32

Crédito Número Saldo

11.056-x 1000,32

Crédito

Débito 14

Múltiplos objetos podem ser criados à partir da mesma classe

Número Saldo

Crédito Débito

Número Saldo

21.342-7 875,32

Crédito

Número Saldo

875,32

Crédito

Débito

21.342-7

Classe

Conta

Objeto conta1 Objeto

conta2

(15)

Classe e Tipo

Tipo é um conjunto de valores relacionados que são capazes de realizar as mesmas operações

Ex: inteiro, caractere, Conta, Banco, etc

Uma classe define um tipo: o tipo cujos

elementos são objetos com as mesmas

propriedades e comportamento

(16)

Atributo e Método

(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 número real ou até outro objeto

Método representa uma operação que um objeto pode fazer

O conjunto de métodos de um objeto determina o comportamento do objeto

16

(17)

Número Saldo

21.342-7 875,32

Crédito

Débito

Atributo e Método

(2)

Atributos da conta

Comportamento

Métodos de

uma conta

(18)

Relações entre Objetos

Geralmente, um software é construído a partir de vários objetos (classes) que se relacionam

As relações de Cliente e Herança são essenciais para a construção de programas

Classe B é Cliente de classe A, se todo objeto de tipo B contiver informação sobre um ou mais objetos do tipo A Classe B é Herdeira de classe A, se B representa uma versão especializada de A

Métodos e os atributos da classe A se tornam, também, parte da classe B

Características e comportamento de A são passadas para B

18

(19)

Relação Cliente

Número Saldo

21.342-7 875,32

Crédito Cria nova Conta

Transferência

Objeto Banco1

Número Saldo

21.342-7 875,32

Crédito

Número Saldo

21.342-7 895,32

Crédito

Débito

Objeto do tipo Banco têm vários objetos do tipo Conta  Banco é cliente de Conta

Banco do Brasil

Nome

Conta1

Conta

Conta1

Conta

Conta1

Conta

Objeto Conta1

(20)

Relação Herança

20

Classe Poupança é uma versão especializada de Conta

 Métodos e atributos são herdados Classe

Conta

Saldo

Crédito Débito Número

Saldo

Crédito Débito Número Juros

Classe

Poupança

(21)

Utilizando OO para Desenvolver Programas

Desenvolvimento de uma solução se torna mais fácil quando quebramos esta solução em módulos gerenciáveis

Quando estamos programando, podemos 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

(22)

Algumas Considerações sobre OO

Orientação a Objetos  Modularidade

Reusabilidade Extensibilidade

Classe é uma entidade que combina 2 conceitos:

Módulo e Tipo

Módulo é um conceito sintático, pois a decomposição do sistema em módulos afeta somente a forma como o programa é escrito, não a funcionalidade dele

Tipo é um conceito semântico, pois o tipo influencia diretamente a execução do sistema, definindo a forma dos objetos que são criados e manipulados pelo sistema em tempo de execução

22

(23)

OO e Linguagens de Programação

Linguagens OO têm em objetos e classes seus elementos fundamentais para construção de programas

Estruturas da linguagem permitem mapeamento direto dos conceitos de OO

Porém, é possível fazer um programa OO em uma linguagem não OO

É possível, também, fazer um programa que não seja OO em uma linguagem OO

Conceito de Orientação a Objetos é independente da linguagem de

programação

(24)

Linguagem C++

Criada por Bjarne Stroustrup em 1983

Pode ser vista quase como uma extensão da linguagem C para dar suporte a OO

Embora quase tudo escrito em C seja compatível com C++, certos comandos podem ter comportamento diferente em C++

Dá suporte a vários conceitos de OO:

Classe, Herança,Polimorfismo, Encapsulamento

Ainda oferece suporte a tratamento de exceções e tipos genéricos

Sintaxe da linguagem Java foi inspirada em C++

24

(25)

Um Programa Imperativo...

Contém

Uma função principal, por onde começa a execução do programa

Várias funções auxiliares, para modularizar, dividir o código em partes

Importação de bibliotecas de funções

Pode ainda conter:

Definição de tipos estruturados

(26)

26

Um Programa Orientado a Objetos ...

Tem a classe como a sua construção fundamental :

Um programa é constituído de uma ou mais classes Que podem ter sido importadas de uma biblioteca de classes

Uma classe contém um ou mais atributos e métodos Um método é composto de instruções

(27)

Ao Invés de Estruturas, Classes!

Define um tipo, com funções que

operam sobre

Estrutura

Função 1 Função 2 Função 3

Estrutura

Função 1 Função 2 Função 3

Classe

(28)

Programação Imperativa x Programação OO

Programação Imperativa tem como elementos principais os procedimentos (funções)

Programação OO tem como elementos principais as classes

Estrutura + funções = classe

Programação OO ainda utiliza :

Herança

Encapsulamento Polimorfismo

28

Veremos depois!

(29)

Implementando o Tipo Conta com Programação Imperativa

Primeiro passo é definir um tipo estruturado Conta

struct Conta{

double saldo;

char numero[11];

char agencia[11];

};

(30)

Implementando as Funções do Tipo Conta

Depois se define as funções que operam sobre o tipo Conta

creditar debitar getSaldo

criaConta 30

void creditar(struct Conta *c ,double v){

c->saldo = c->saldo + v;

}

Passa-se estrutura (ou endereço de estrutura) como parâmetro

(31)

Implementando as Funções 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;

}

(32)

Implementando as Funções do Tipo Conta

32

struct Conta* criaConta(char *num, char* ag) { struct Conta *retorno;

retorno = (struct Conta *)

malloc (sizeof(struct Conta));

if (retorno == NULL){

printf(“Erro na alocação de memória!”) } else {

strcpy(retorno->numero, num);

strcpy(retorno->agencia, ag);

retorno->saldo = 0;

}

return retorno;

}

Alocando dinamicamente uma estrutura

(33)

Usando o Tipo Conta em Programação Imperativa

int main() {

struct Conta *conta1;

conta1 = criaConta(“1234-5”,”007-x”);

if (conta1 == NULL){

printf(“Erro na alocação de memória!”) } 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;

}

(34)

Implementando o Tipo Conta com Programação OO (C++)

Primeiro passo é definir a classe Conta

Atributos e Métodos

34

class Conta{

private:

double saldo;

char numero[11];

char agencia[11];

public:

void creditar(double v);

void debitar(double v);

double getSaldo();

Conta(char* num, char* ag);

};

Atributos Métodos

Construtor

(35)

Implementando os Métodos do Tipo Conta

void Conta::creditar(double v){

saldo = saldo + v;

}

Indica que método faz parte da classe Conta

Não precisa passar objeto como parâmetro!

saldo é um atributo que foi definido na classe Conta

(36)

Implementando os Métodos do Tipo Conta

36

void Conta::debitar(double v){

if (v <= saldo)

saldo = saldo - v;

}

double Conta::getSaldo(){

return saldo;

}

(37)

Construtor

Tipo especial de método que é chamado no ato de criação de um objeto da classe desejada

Importante para fazer algumas inicializações 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 parâmetros

Em C++, deve ter o mesmo nome da classe Não possui tipo de retorno

Não é obrigatório definir um construtor

Existe em C++ um construtor default sem parâmetros

(38)

Implementando o Construtor do Tipo Conta

38

Conta::Conta(char *num, char* ag) { strcpy(numero, num);

strcpy(agencia, ag);

saldo = 0;

}

(39)

Usando o Tipo Conta em Programação OO

#include <iostream>

using namespace std;

int main() { Conta *c;

c = new Conta(“1234-5”,”007-x”);

if (c == NULL){

printf(“Erro na criação do objeto!”) } 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 uma classe em tempo de execução (dinamicamente)

Para chamar método a partir de

Para imprimir na tela

(40)

40

Criação Dinâmica 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

criação de um objeto

Construtor do objeto a ser

criado

(41)

Avaliação do operador new

Cria um objeto da classe NomeDaClasse e armazena na sua memória

Inicializa os atributos deste objeto usando o construtor desta classe

Devolve como resultado da avaliação uma referência (endereço da memória) para o objeto criado

Para avaliar uma expressão do tipo

new NomeDaClasse();

o computador...

(42)

Criando um objeto dinamicamente...

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

4. Devolve o endereço como resultado da avaliação

42

1. Cria o objeto na memória

2. Inicializa o objeto

12-3 11-2

id275

3. Associa um endereço ao

objeto

12-3 11-2

(43)

Construtores e new

new NomeDaClasse(argumentos)

O número, ordem e tipos dos argumentos

Podemos ter mais de um construtor para um determinado objeto

A escolha do construtor para inicializar os atributos é determinada pela lista de argumentos, entre parênteses

(44)

Referências para objetos

A referência funciona

como a identidade do objeto

O objeto

id305

A referência para o objeto

44

Todo acesso e manipulação é feito indiretamente, através de uma referência (endereço) para o objeto Quando declaramos uma variável do tipo ponteiro para um objeto, ela não armazena o objeto e sim uma referência para um objeto daquele tipo

Conta* conta1 = new Conta(“12-3”,”11-2”);

conta1 armazena este valor

(45)

Referências e identidade de um objeto

id305

id309

id312

Objetos diferentes, mas com o mesmo conteúdo (clones)

Referências diferentes  objetos

diferentes

12-3 11-2

12-3 11-2

11-5 12-4

(46)

46

Considerações sobre Criação de Objetos

Os valores dos atributos (estado) de um objeto podem mudar durante a execução de um programa, mas isso não afeta a identidade do objeto

O ato de criar um objeto é chamado de

instanciar um objeto de uma determinada

classe

(47)

Criação Estática de Objetos

C++ permite também a criação estática (em tempo de compilação) de objetos

No ato da declaração de uma variável do tipo de uma classe, objeto é criado

Na declaração deve-se passar argumentos do construtor

Conta c(“12-3”,”11-2”);

Tipo da variável c é

Conta

Argumentos do construtor

(48)

Usando Criação Estática de Objetos do Tipo Conta

48

#include <iostream>

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;

}

Declaração para instanciar objeto em tempo de compilação

Utiliza-se operador “.” para utilizar os métodos do objeto

criado estaticamente

Referências

Documentos relacionados

Neste exemplo, para além do atributo border=0 (que especifica que não se pretende a bordadura que é colocada, por defeito, pelo HTML), constate-se uma outra possibilidade que é

Qual a diferença entre Filosofia e Ciências? Parece ser um conhecimento inacessível para as pessoas comuns.. Neste cartoon, vemos a menina Mafalda pedindo ao seu pai uma definição

No caso da classe acima, os 4 atributos (variáveis) que caracterizam um produto, recebem neste método seus valores iniciais, que podem ser modificados por operações futuras deste

Suponha que tem de desenvolver um programa mapeamento das cadeias de transmissão do vírus Covid-19. Para cada pessoa que tenha teste positivo, é necessário registar sobre

• Todo objeto possui uma identidade; quando criamos um objeto com new, a identidade dele é diferente de todos os outros objetos, mesmo objetos da mesma classe, com o conteúdo

condição – expressão cujo valor resultante é booleano estrutura condicional – estrutura de desvio do fluxo de controle que executa diferentes comandos de acordo com uma

Em nosso cotidiano, consideramos as coisas materiais como objetos (carros, por exemplo), que têm seus atributos (características descritivas como marca, modelo, cor, peso, etc.) e

Funcional Lógico Estruturado.