fundamentos de programaçãodanielc/ensino/graduacao...1/30 fundamentos de programação orientada a...

30
1/30 Fundamentos de Programação Orientada a Objetos Abstração em computação, paradigmas de linguagens de programação. Conceitos de orientação a objetos. Aula 3 Prof. Daniel Cavalcanti Jeronymo Universidade Tecnológica Federal do Paraná (UTFPR) Engenharia Eletrônica – 3º Período ET43I

Upload: others

Post on 21-Jul-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Fundamentos de Programaçãodanielc/Ensino/Graduacao...1/30 Fundamentos de Programação Orientada a Objetos Abstração em computação, paradigmas de linguagens de programação

1/30

Fundamentos de ProgramaçãoOrientada a Objetos

Abstração em computação, paradigmas de linguagens de programação. Conceitos de orientação a objetos.Aula 3

Prof. Daniel Cavalcanti Jeronymo

Universidade Tecnológica Federal do Paraná (UTFPR)Engenharia Eletrônica – 3º Período

ET43I

Page 2: Fundamentos de Programaçãodanielc/Ensino/Graduacao...1/30 Fundamentos de Programação Orientada a Objetos Abstração em computação, paradigmas de linguagens de programação

2/30

Plano de Aula

• Abstração

• Paradigmas de linguagens de programação

• Conceitos de orientação a objetos

Page 3: Fundamentos de Programaçãodanielc/Ensino/Graduacao...1/30 Fundamentos de Programação Orientada a Objetos Abstração em computação, paradigmas de linguagens de programação

3/30

Abstração

• “Uma abstração indica as características essenciais de um objeto que o distingue de todos osoutros tipos de objetos e entãoproporciona fronteiras conceituaisnitidamente definidas, relativas a perspectiva do espectador”

– G. Booch

Abstração Paradigmas OOP

Page 4: Fundamentos de Programaçãodanielc/Ensino/Graduacao...1/30 Fundamentos de Programação Orientada a Objetos Abstração em computação, paradigmas de linguagens de programação

4/30

Abstração

• Foco no essencial e ignora-se o irrelevante

Abstração Paradigmas OOP

Page 5: Fundamentos de Programaçãodanielc/Ensino/Graduacao...1/30 Fundamentos de Programação Orientada a Objetos Abstração em computação, paradigmas de linguagens de programação

5/30

Abstração

• Vamos pensar numa MESA

Abstração Paradigmas OOP

Page 6: Fundamentos de Programaçãodanielc/Ensino/Graduacao...1/30 Fundamentos de Programação Orientada a Objetos Abstração em computação, paradigmas de linguagens de programação

6/30

Abstração

• Não foi especificado o tipo da mesa

• Madeira? Vidro? 4 pernas? 3 pernas? Pequena? Grande? Colunacentral? Pernas distribuídas nos cantos?

• Mesmo assim todos entendem o conceito e conseguemvisualizar uma

Abstração Paradigmas OOP

Page 7: Fundamentos de Programaçãodanielc/Ensino/Graduacao...1/30 Fundamentos de Programação Orientada a Objetos Abstração em computação, paradigmas de linguagens de programação

7/30

Abstração

• Abstração de uma mesa

• Modelo abstrato:

• Um objeto apoiado no chão

• Exibe uma superfície plana para apoio de outros objetos

• O conceito é separado e independente de qualquer exemplo específico

Abstração Paradigmas OOP

Page 8: Fundamentos de Programaçãodanielc/Ensino/Graduacao...1/30 Fundamentos de Programação Orientada a Objetos Abstração em computação, paradigmas de linguagens de programação

8/30

Abstração

• O essencial e o irrelevante dependem de contexto

• Logo, a abstração depende de contexto

• Abstração de uma mesa em gravidade zero?

Abstração Paradigmas OOP

Page 9: Fundamentos de Programaçãodanielc/Ensino/Graduacao...1/30 Fundamentos de Programação Orientada a Objetos Abstração em computação, paradigmas de linguagens de programação

9/30

Abstração

Conceito amplamente utilizado para gerenciar complexidade

• Sistemas complexos são decompostos em componentes menores

Abstração Paradigmas OOP

Page 10: Fundamentos de Programaçãodanielc/Ensino/Graduacao...1/30 Fundamentos de Programação Orientada a Objetos Abstração em computação, paradigmas de linguagens de programação

10/30

Abstração

Cada componente deve ter as seguintes características bem definidas:

• Comportamento (faz A)

• Responsabilidade (faz apenas A e apenas ele modifica B)

• Comunicação (para fazer A ou modificar B, deve seracessado pela interface C)

• Estado interno (B)

• Interface (C)

Interface: ponto onde dois sistemas interagem

Abstração Paradigmas OOP

Page 11: Fundamentos de Programaçãodanielc/Ensino/Graduacao...1/30 Fundamentos de Programação Orientada a Objetos Abstração em computação, paradigmas de linguagens de programação

11/30

Abstração

Tipos Abstratos de Dados (Abstract Data Types)

• Modelos para tipos de dados definidos pelos seuscomportamentos

• Exemplo:

int A;

A = 10;

A += 21;

• Não somente primitivas mas também tipos complexos: lista, pilha, árvore, fila, etc.

Sabemos o que faz (semântica) mas não como é implementado

Abstração Paradigmas OOP

Page 12: Fundamentos de Programaçãodanielc/Ensino/Graduacao...1/30 Fundamentos de Programação Orientada a Objetos Abstração em computação, paradigmas de linguagens de programação

12/30

Abstração

• Permite obter um modelo computacional

• Modelo: descrição de um sistema usando conceitos e linguagem de uma solução

• A solução computacional depende do paradigma de linguagemde programação

Abstração Paradigmas OOP

Page 13: Fundamentos de Programaçãodanielc/Ensino/Graduacao...1/30 Fundamentos de Programação Orientada a Objetos Abstração em computação, paradigmas de linguagens de programação

13/30

Paradigmas de Programação

• Paradigmas principais:

• Declarativa (what) x Imperativa (how)

• Não-estruturada x Estruturada

Abstração Paradigmas OOP

Page 14: Fundamentos de Programaçãodanielc/Ensino/Graduacao...1/30 Fundamentos de Programação Orientada a Objetos Abstração em computação, paradigmas de linguagens de programação

14/30

Paradigmas de Programação

• Paradigmas principais:

• Procedural x Orientada a Objetos

Abstração Paradigmas OOP

Page 15: Fundamentos de Programaçãodanielc/Ensino/Graduacao...1/30 Fundamentos de Programação Orientada a Objetos Abstração em computação, paradigmas de linguagens de programação

15/30

Paradigmas de Programação

• Procedural

• O problema é separado em variáveis, estruturas de dados e subrotinas

• As subrotinas transformam dados

• Orientada a Objetos

• O problema é modelado utilizando objetos que exibemcomportamento (métodos) e dados (atributos).

• Os métodos combinam subrotinas e dados, transformandoa si mesmos.

Abstração Paradigmas OOP

Page 16: Fundamentos de Programaçãodanielc/Ensino/Graduacao...1/30 Fundamentos de Programação Orientada a Objetos Abstração em computação, paradigmas de linguagens de programação

16/30

Paradigmas de Programação

• Procedural x Orientada a Objetos – Quando Usar?

Abstração Paradigmas OOP

Page 17: Fundamentos de Programaçãodanielc/Ensino/Graduacao...1/30 Fundamentos de Programação Orientada a Objetos Abstração em computação, paradigmas de linguagens de programação

17/30

Conceitos OOP

• Evolução do processo de abstração nas linguagens de programação

• Assembly – abstração da linguagem de máquina

• Linguagens procedurais (C, FORTRAN, PASCAL, etc) – abstraçõesda linguagem Assembly

Nas linguagens procedurais a solução de um problema é modelada como uma série de operações que transformamdados

Abstração Paradigmas OOP

Page 18: Fundamentos de Programaçãodanielc/Ensino/Graduacao...1/30 Fundamentos de Programação Orientada a Objetos Abstração em computação, paradigmas de linguagens de programação

18/30

Conceitos OOP

• Evolução do processo de abstração nas linguagens de programação

• Linguagens orientadas a objetos (C++, Java, C#, etc) –abstrações do problema

Nas linguagens OO a solução de um problema é modeladaem termos do próprio problema

Objetos modelam pequenas partes do problema: possuemestado e operações

Mundo Computacional

Mundo Real

Abstração Paradigmas OOP

Page 19: Fundamentos de Programaçãodanielc/Ensino/Graduacao...1/30 Fundamentos de Programação Orientada a Objetos Abstração em computação, paradigmas de linguagens de programação

19/30

Conceitos OOP

Abstração Paradigmas OOP

Page 20: Fundamentos de Programaçãodanielc/Ensino/Graduacao...1/30 Fundamentos de Programação Orientada a Objetos Abstração em computação, paradigmas de linguagens de programação

20/30

Conceitos OOP

• Structs

• Modelam propriedades pelo armazenamento de dados

• Como modelar um carro por estrutura?

• Objetos

• Mais completos que structs

• Modelam comportamentos

• Armazenam atributos (dados)

• Possuem métodos (funções)

• Como modelar um carro por objeto?

Abstração Paradigmas OOP

Page 21: Fundamentos de Programaçãodanielc/Ensino/Graduacao...1/30 Fundamentos de Programação Orientada a Objetos Abstração em computação, paradigmas de linguagens de programação

21/30

Conceitos OOP

Objetos

• São variáveis

• Possuem um tipo – sua classe

• Comunicam-se por mensagens (chamadas de funções)

• Objeto cubo – atributos e métodos?

Abstração Paradigmas OOP

Page 22: Fundamentos de Programaçãodanielc/Ensino/Graduacao...1/30 Fundamentos de Programação Orientada a Objetos Abstração em computação, paradigmas de linguagens de programação

22/30

Conceitos OOP

Objetos

Classe: Cubo

Atributos:

enum Cor lado_esquerdo;

enum Cor lado_direito;

enum Cor lado_topo;

Métodos:

girar_esquerda();

girar_direita();

Abstração Paradigmas OOP

Page 23: Fundamentos de Programaçãodanielc/Ensino/Graduacao...1/30 Fundamentos de Programação Orientada a Objetos Abstração em computação, paradigmas de linguagens de programação

23/30

Conceitos OOP

Objetos

Instanciando a classe Cubo obtemos os objetos:

meu_cubo1 = Cubo();

meu_cubo2 = Cubo();

Abstração Paradigmas OOP

Page 24: Fundamentos de Programaçãodanielc/Ensino/Graduacao...1/30 Fundamentos de Programação Orientada a Objetos Abstração em computação, paradigmas de linguagens de programação

24/30

Conceitos OOP

Objetos

Cada objeto é distinto:

meu_cubo1.lado_esquerdo = azul;

meu_cubo1.lado_direito = laranja;

meu_cubo1.lado_topo = vermelho;

meu_cubo2.lado_esquerdo = vermelho;

meu_cubo2.lado_direito = azul;

meu_cubo2.lado_topo = laranja;

Abstração Paradigmas OOP

Page 25: Fundamentos de Programaçãodanielc/Ensino/Graduacao...1/30 Fundamentos de Programação Orientada a Objetos Abstração em computação, paradigmas de linguagens de programação

25/30

Conceitos OOP

Objetos

Métodos alteram apenas aquele objeto:

meu_cubo1.girar_esquerda();

Abstração Paradigmas OOP

Page 26: Fundamentos de Programaçãodanielc/Ensino/Graduacao...1/30 Fundamentos de Programação Orientada a Objetos Abstração em computação, paradigmas de linguagens de programação

26/30

Conceitos OOP

Objetos

Métodos alteram apenas aquele objeto:

meu_cubo1.girar_esquerda();

meu_cubo2.girar_esquerda();

Abstração Paradigmas OOP

Page 27: Fundamentos de Programaçãodanielc/Ensino/Graduacao...1/30 Fundamentos de Programação Orientada a Objetos Abstração em computação, paradigmas de linguagens de programação

27/30

Conceitos OOP

Objetos

Abstração Paradigmas OOP

Page 28: Fundamentos de Programaçãodanielc/Ensino/Graduacao...1/30 Fundamentos de Programação Orientada a Objetos Abstração em computação, paradigmas de linguagens de programação

28/30

Conceitos OOP

• Conceitos principais

Abstração Encapsulamento

Herança Polimorfismo

Abstração Paradigmas OOP

Page 29: Fundamentos de Programaçãodanielc/Ensino/Graduacao...1/30 Fundamentos de Programação Orientada a Objetos Abstração em computação, paradigmas de linguagens de programação

29/30

Conceitos OOP

• Orientação a objetos permite a aplicação de diversas regras

• CUIDADO!

• Teorema Fundamental da Engenharia de Software:

“Todo problema pode ser resolvido pela introdução de um nível extra de indireção”

• Corolário de Henney “… exceto o problema de muitos níveis de indireção”

Abstração Paradigmas OOP

Page 30: Fundamentos de Programaçãodanielc/Ensino/Graduacao...1/30 Fundamentos de Programação Orientada a Objetos Abstração em computação, paradigmas de linguagens de programação

30/30

Conceitos OOP

• Como realizar uma lista simplesmente encadeada em C?

• Usando OOP – É possível?

Abstração Paradigmas OOP