SlideShare uma empresa Scribd logo
Paradigma Orientado a Objeto
Prof. Tony Alexander Hild
Paradigmas de Linguagem de Programação – 3 CC – Unicentro – 2013
Sumário
●

Introdução

●

Conceitos Gerais

●

Abstração

●

Encapsulamento

●

Herança

●

Polimorfismo

●

Coesão

●

Acoplamento

●

Mensagens

●

Modularização

●

Exemplos de Linguagens

2
Linguagens Orientadas a Objeto
●

●

●

●

A maioria das linguagens orientadas a objeto são
linguagens de alto nível;
O foco das linguagens OO não é na estrutura, mas
na modelagem dos dados;
Programadores codificam usando “plantas” de
modelos de dados chamados classes;
Exemplos de linguagens de programação OO
incluem C++, Java, C#, Visual Basic. Net, Ruby,
Smalltalk, etc.
3
Conceitos Gerais de Linguagens
Orientadas a Objeto
●

●

Objeto – Entidade de programação que contém métodos
e atributos e pode reagir a eventos.
Método – Coisas que o objeto pode fazer. São os
“verbos” dos objetos. No código, geralmente são
identificados por uma palavra de “ação”, i.e. Show,
Hide, Calculate, Delete, etc.

4
Conceitos Gerais de Linguagens
Orientadas a Objeto
●

●

Atributos – Coisas que descrevem um objeto. São os
“adjetivos” dos objetos. No código são geralmente
identificados por uma palavra “descritiva”, i.e. Enabled,
BackColor, etc.
Eventos – Forças externas a um objeto ao qual esse
objeto pode reagir. No código, geralmente são atrelados
a um procedimento de evento.

5
Conceitos Gerais de Linguagens
Orientadas a Objeto
●

Classe – Fornece uma maneira para criar novos objetos
com base em uma "meta definição" de um objeto:
–

●

Exemplo: A classe Automóvel

Construtores – Métodos especiais utilizados para criar
novas instâncias de uma classe:
–

Exemplo: um Honda Civic é uma instância da classe
Automóvel.

6
public delegate void BuzinarHandler<T>(T emissor, string som);
public class Automovel
{
public string Modelo;
public int Ano;
public Color Cor;
private bool EstaLigado = false;
private int Velocidade = 0;
public event BuzinarHandler<Automovel> Buzinar;

Atributos

Evento

public Automovel ()
{
}
public void Ligar ()
{
EstaLigado = true;
}

Classe

Construtor

public void Desligar ()
{
EstaLigado = false;
}
public void Acelerar ()
{
Velocidade++;
}

Métodos

public void Frear ()
{
Velocidade--;
}
public void ApertarBuzina ()
{
Buzinar(this, "Beep-Beep");
}
}

7
public class Automovel
{
public string Modelo;
public int Ano;
public Color Cor;
private bool EstaLigado = false;
private int Velocidade = 0;

Atributos

public event BuzinarHandler<Automovel> Buzinar; Evento

Classe

public Automovel ()
{
}
.
.
.

Construtor

}

8
public class Automovel
{
.
.
.
public void Ligar ()
{
EstaLigado = true;
}
public void Desligar ()
{
EstaLigado = false;
}

Classe

Métodos

public void Acelerar ()
{
Velocidade++;
}
public void Frear ()
{
Velocidade--;
}

}

public void ApertarBuzina ()
{
Buzinar(this, "Beep-Beep");
}
9
Objeto ou Instância da classe
Automovel
var honda_civic = new Automovel () {
Ano = 2013,
Cor = Color.Black,
Modelo = "Honda Civic"
};

10
Abstração
●

Abstração significa ignorar características, propriedades
ou funções irrelevantes e enfatizar as relevantes ...
Relevantes
à quê?

●

●

... relevantes para o projeto dado (antecipando futura
reutilização em projetos similares);
Abstração = gerenciar complexidade.

11
Abstração
●

A abstração é algo que fazemos todos os dias;
–

–

●

Abstraímos as propriedades do objeto, e mantemos apenas o que
precisamos;

–
●

Olhando para um objeto, vemos as coisas sobre ele que têm significado
para nós;

Por exemplo, alunos têm "nome", mas não "cor dos olhos".

Permite representar uma realidade complexa em termos de um
modelo simplificado;
Abstração destaca as propriedades de uma entidade que precisamos
e esconde os outros.
12
Encapsulamento
●

●

●

Um mecanismo da linguagem para restringir o
acesso a alguns dos componentes do objeto;
Uma construção da linguagem que facilita o
agrupamento de dados com métodos (ou outras
funções) que operam nesses dados;
Ocultação de Informações.

13
Encapsulamento
●

●

●

●

A representação interna de um objeto é geralmente escondida da
visão externa da definição do objeto (interface);
Normalmente, apenas os métodos do próprio objeto podem acessar
ou modificar diretamente os seus campos;
Algumas linguagens, como Smalltalk e Ruby só permitem o acesso
ao estado (atributos/campos) através de métodos;
A maioria das outras (por exemplo, C++, C # ou Java) oferecem ao
programador um grau de controle sobre as entidades que estão
sendo escondidas, normalmente através de palavras-chave como
public, private, friend, protected, etc.
14
Encapsulamento
●

●

●

●

O ponto principal é que, ao pensar o sistema como sendo
composto de objetos independentes, mantenham-se as
subpartes realmente independentes;
Os objetos devem comunicar-se apenas por meio de troca
de mensagens bem definidas;
Diferentes grupos de programadores podem trabalhar em
diferentes partes do projeto, apenas certificando-se de que
estejam de acordo com uma interface;
É possível construir sistemas maiores com menos esforço.
15
Encapsulamento – Benefícios
●

Garante que as mudanças estruturais permanecem locais:
–

–

●

Alterando os membros internos de um classe não afeta qualquer código fora
da classe;
Alterar a implementação dos métodos não modifica a forma dos clientes
usá-los.

Encapsulamento permite adicionar alguma lógica ao acessar os
dados do cliente:
–

●

Por exemplo: validação ao modificar o valor da propriedade.

Ocultando detalhes de implementação reduz a complexidade:
–

Manutenção mais fácil.

16
Encapsulamento - Resumo
●
●

●

Encapsulamento esconde os detalhes de implementação;
A classe anuncia algumas operações (métodos)
disponíveis para seus clientes - a sua interface pública;
Todos os membros de dados (campos) de uma classe
devem ser escondidos:
–

Acessados via propriedades (somente leitura e de leitura e
escrita);

–

Nenhum membro da interface deve ser escondido.

17
Exemplo de Encapsulamento - C#
namespace Encapsulation
{
class Program
{
public class Account
{
private decimal accountBalance = 500.00m;

}

public decimal CheckBalance ()
{
return accountBalance;
}

static void Main ()
{
Account myAccount = new Account ();
decimal myBalance = myAccount.CheckBalance ();

}

}

}

/* This Main method can check the balance via the public
* "CheckBalance" method provided by the "Account" class
* but it cannot manipulate the value of "accountBalance" */

18
public class Automovel
{
private bool estaLigado = false;
private int velocidade = 0;
.
.
.
public void Ligar ()
{
estaLigado = true;
}
public void Desligar ()
{
estaLigado = false;
}
public void Acelerar ()
{
velocidade++;
}
public void Frear ()
{
velocidade--;
}
public bool EstaLigado() {
return estaLigado;
}

}

public bool Velocidade() {
return velocidade;
}

19
Herança
●
●

O conceito de herança foi criado em 1968 para a linguagem Simula;
Herança é o tema central da programação orientada a a objetos e das linguagens que a
suportam;

●

Permite aos programadores criar novas classes com base em uma classe existente;

●

É um relacionamento IS-A (É-UM);

●

A classe pai é também chamada de classe base ou superclasse;

●

A classe filha é também chamada de classe derivada ou subclasse;

●

A herança permite que subclasses herdem as características da classe pai existente:
–

Atributos (campos e propriedades);

–

Operações (métodos).

20
Herança
●

Novos métodos e atributos podem ser criados na subclasse, sem
afetar a definição da classe pai. Por exemplo:
–

Adicionar novos campos e/ou métodos;

–

Redefinir métodos, ou seja, modificar o comportamento existente:
●

–

O novo método sobrescreve o método herdado e passa a ser chamado de método
sobrescrito.

Redefinir métodos da superclasse somente para os clientes e para a
subclasse:
●

Modificador new em C#.

21
Herança
●

Métodos ou funções virtuais são métodos ou funções que
podem ter seu comportamento sobrescrito por uma
subclasse com um método ou função com a mesma
assinatura;
–

Também é um conceito de polimorfismo;

–

Despacho dinâmico.

22
Herança
●

Herança múltipla:
–

Herança múltipla permite uma nova classe herdar de duas ou mais classes;

–

Algumas linguagens permitem herança múltipla de classes concretas, e
outras somente de interfaces:
●

●

●
●

C++, Common Lisp, Eiffel, Scala, OCaml, Pearl, Python permitem herança múltipla
de classes concretas;
C#, D, Java, Nemerle, Object Pascal (Delphi), Objective-C permitem herança
múltipla somente de interfaces;
Smalltalk permite apenas herança simples;
Em Ruby as classes possuem apenas um pai (superclasse), mas podem herdar de
diferentes módulos.

23
Herança
●

Herança múltipla:
–

Problema do diamante:
●

Se a classe D sobrescrever o
método ToString(), de qual
classe deve ser sobrescrito?

24
Herança
●

Herança múltipla:
–

Desvantagens:
●
●

–

Complexidade da linguagem e implementação;
Potencial ineficiência.

Vantagens:
●

Às vezes, é bastante conveniente. Quando?

25
Herança
●

Herança vs. Subtipos:
–

–

Princípio de substituição de Liskov;

–

Problema Círculo-Elipse ou Quadrado-Retângulo;

–
●

Subtipos são relacionamentos do tipo É-UM, onde é herdado o
comportamento, e não somente uma implementação, como é o
caso dos relacionamentos do tipo TEM-UM.

Herança de interfaces → a ser visto em polimorfismo.

Exemplo de código...

26
Herança
●

Restrições:
–

Dependendo da linguagem é possível:
●
●

●
●

●
●

Definir classes que não podem ser herdadas;
Definir classes abstratas que não podem ser instanciadas, a não ser
quando herdadas por outra classe;
Criar entidades que não podem ser sobrescritas;
Ocultar entidades de seus clientes, mas permitir às suas subclasses vêlos;
Esconder entidades de suas subclasses;
Final/Sealed/Abstract/Protected.

27
Herança
●

Benefícios
–

Herança tem uma série de benefícios;

–

Extensibilidade;

–

Aumento de produtividade pode ocorrer com o reúso:
●
●

Tipos de dados abstratos são difíceis de reusar − sempre precisam de mudanças;
Definições de tipos de dados abstratos são todas independentes e no mesmo nível.

–
–
●

Abstração;
Elimina código redundante;

Use herança para criar relacionamentos É-UM (IS-A)
–

●

Por exemplo cão é-um animal (cães são uma espécie de animais)

Não usar para criar relacionamentos TEM-UM (HAS-A)
–

Por exemplo cão tem-um nome (cão não é o tipo nome)

28
Herança
●

Desvantagens:
–

Cria dependências entre classes em uma hierarquia;

–

Pode se tornar extramamente complexa com a adição de
diversos níveis;

–

Diminui a flexibilidade do código.

29
Exemplo de Código
Herança

30
//C#
abstract class Animal
{
public string Name;
public void Drink()
{
}
public virtual void Eat()
{
}
public void Go()
{
}
}
class Cat : Animal
{
// warning: Esconde o Drink() herdado. Usar new.
public void Drink()
{
}
// Sobrescreve o Eat() herdado.
public override void Eat()
{
}
// Esconde o Go() herdado.
public new void Go()
{
}
}

31
// C++
class animal
{
void /*nonvirtual*/ move() {
cout << "This animal moves in some way" << endl;
}
virtual void eat() {}
};
// The class "animal" may possess a declaration for eat() if desired.
class fish : public animal
{
// The non virtual function move() is inherited but cannot be overridden
void eat() {
cout << "Fish ingest food through the mouth and break it down in the esophagus." << endl;
}
};

32
Polimorfismo
●

Polimorfismo = capacidade de ter mais de uma forma (os objetos
têm mais de um tipo);
–
–

●

A classe pode ser usada através de sua interface pai;
A classe filha pode substituir alguns dos comportamentos da classe pai.

Permite definir e utilizar operações abstratas:
–

Operações abstratas são definidas na interface da classe base e
implementadas nas classes derivadas;
●

●

Declarado como abstrato ou virtual.

Exemplo de código...

33
Polimorfismo
●

●

Criação de métodos que descrevem a maneira de
fazer alguma função geral (Exemplo: O método
"Acelerar" na classe de Veiculo);
Métodos polimórficos podem se adaptar a tipos
específicos de objetos.

34
Polimorfismo
●

Porque tratar um objeto de determinado tipo como sendo
um objeto de seu tipo base?
–

Para invocar operações abstratas;

–

Para misturar diferentes tipos relacionados na mesma coleção:
●

Por exemplo List<object> pode conter qualquer coisa.

–

Para passar objeto mais específico para um método que espera
um parâmetro de um tipo mais genérico;

–

Para declarar um campo mais genérico que será inicializado e
"especializado" mais tarde.
35
Polimorfismo – Como funciona?
●

●

Polimorfismo assegura que o método adequado para a subclasse é
chamado através da interface de sua superclasse;
Polimorfismo é implementado usando uma técnica chamada de ligação
tardia de método (late method binding):
–
–

●

O método exato a ser chamado é determinado em tempo de execução, pouco
antes de realizar a chamada;
Aplicada a todos os métodos abstract / virtual.

Nota: A ligação tardia é mais lenta do que a de ligação normal (early).

36
O modificador override - C#
●

●

●

●

Usando override podemos modificar um método ou
propriedade;
Um método override fornece uma nova implementação de
um membro herdado de uma classe base;
Não é possível substituir um método não-virtual ou
estático;
O método base substituído deve ser virtual, abstract, ou
override.
37
Polimorfismo por sobrecarga
●

Métodos com o mesmo nome podem ter comportamentos
diferentes dependendo dos tipos dos argumentos.
program Adhoc;
function Add( x, y : Integer ) : Integer;
begin
Add := x + y
end;
function Add( s, t : String ) : String;
begin
Add := Concat( s, t )
end;
begin
Writeln(Add(1, 2));
Writeln(Add('Hello, ', 'World!'));
end.

38
Polimorfismo paramétrico
●
●

●

●

Conhecido como generics ou templates;
Permite que uma função ou um tipo de dados seja escrito
genericamente, de modo que ele pode lidar com valores
de forma idêntica, sem depender do seu tipo;
Torna uma linguagem mais expressiva, mantendo a
completa segurança de tipos;
Exemplo de código...

39
Polimorfismo por subtipos
●

Visto anteriormente na herança;

●

Utiliza a abstração;

●

●

Em algumas linguagens como C# e Java pode ser obtido com a utilização de
interfaces;
Uma interface é um conjunto de operações (métodos) que determinam o que objeto
pode realizar:
–
–

●

Também chamado de "contrato" para o fornecimento de um conjunto de operações;
Define o comportamento abstrato.

Interfaces fornecem abstrações:
–

Você não deveria ter que saber nada a respeito sobre a implementação, a fim de utilizá-la.

40
Coesão
●

●

Coesão descreve o quanto todas as partes em uma classe
suportam um propósito bem definido;
A coesão deve ser forte:
–
–

●

Abstrações bem definidas mantém uma forte coesão;
Classes devem conter funcionalidades fortemente relacionadas,
apontando para uma única finalidade.

Coesão é uma ferramenta útil para gerenciar a
complexidade e aumentar o reúso.

41
Coesão
●

Coesão é diminuída se:
–

As funcionalidades embutidas em uma classe, acessado através
de seus métodos, têm pouco em comum;

–

Métodos realizam atividades muitas variadas, muitas vezes
usando conjuntos de dados de granulação grossa ou não
relacionados.

42
Coesão
●

As desvantagens da baixa coesão (ou "coesão fraca") são:
–

Maior dificuldade na compreensão módulos;

–

Maior dificuldade em manter um sistema, pois as alterações
lógicas no domínio afetam vários módulos, e porque mudanças
em um módulo exigem mudanças em módulos relacionados;

–

Maior dificuldade em reutilizar um módulo porque a maioria
dos aplicativos não vai precisar do conjunto aleatório de
operações previstas naquele módulo.

43
Tipos de coesão
●

Coesão por coincidência (pior):
–

●

Coesão lógica:
–

●

Quando partes de um módulo estão agrupadas porque operam com os mesmos dados (por exemplo, um módulo que opera no mesmo registro de
informações) .

Coesão sequencial:
–

●

Quando partes de um módulo estão agrupadas porque eles sempre seguem uma determinada sequência de execução (por exemplo, uma função que
verifica as permissões de arquivos e, em seguida, abre o arquivo ).

Coesão comunicacional:
–

●

Quando partes de um módulo estão agrupadas por quando eles são processados (por exemplo, uma função que é chamada após capturar uma
exceção que fecha os arquivos abertos, cria um log de erro, e notifica do usuário).

Coesão processual:
–

●

Quando partes de um módulo estão agrupadas porque , logicamente, são categorizados para fazer a mesma coisa , mesmo se eles são diferentes por
natureza (por exemplo, agrupar todos rotinas de manipulação de entrada de mouse e teclado ).

Coesão temporal:
–

●

Quando partes de um módulo estão agrupadas de forma arbitrária , a única relação entre as partes é que eles foram agrupados (por exemplo, uma
classe "Util" ).

Quando partes de um módulo estão agrupadas porque a saída de uma parte é a entrada para outra parte como uma linha de montagem (por exemplo,
uma função que lê dados de um arquivo e processa os dados).

Coesão funcional (melhor):
–

Quando as partes de um módulo estão agrupados porque todas elas contribuir para uma única tarefa bem definida do módulo (por exemplo,
tokenizing de uma string XML).

44
Coesão forte
●

Exemplo de coesão forte:
–

Classe Math que contém
métodos:
●
●
●

Sin(), Cos(), Asin()
Sqrt(), Pow(), Exp()
Math.PI, Math.E

double sideA = 40, sideB = 69;
double angleAB = Math.PI / 3;

double sideC = Math.Pow(sideA, 2) +
Math.Pow(sideB, 2) 2 * sideA * sideB *
Math.Cos(angleAB);

double sidesSqrtSum = Math.Sqrt(sideA) +
Math.Sqrt(sideB) +
Math.Sqrt(sideC);

45
Coesão fraca
●

Exemplos de coesão fraca:
–

Classe mágica que contém os seguintes métodos:

MagicClass.MakePizza("Fat Pepperoni");
MagicClass.WithdrawMoney(9996.0);
MagicClass.OpenDBConnection();

●

Outro exemplo:
public void PrintDocument(Document d);
public void SendEmail(string recipient, string subject, string text);
public void CalculateDistanceBetweenPoints(int x1, int y1, int x2, int y2);

46
Acoplamento
●

Acoplamento descreve o quão forte é a relação de
interdependência de uma classe ou de uma rotina com
outras classes ou rotinas;
–

O acoplamento deve ser mantido solto ou baixo;

–

Os módulos devem depender pouco uns dos outros;

–

Todas as classes e rotinas devem ter relações pequenas, diretas,
visíveis e flexíveis com outras classes e rotinas;

–

Um módulo deve ser facilmente utilizada por outros módulos;

–

Deve ser inversamente proporcional à coesão.
47
Tipos de acoplamentos
●

Conteúdo (alto):
–

●

Comum:
–

●

Quando módulos ou classes compartilham uma estrutura de dados composta e utilizam apenas uma parte da mesma, possivelmente partes
diferentes.

Dados:
–

●

Quando um módulo ou classe controla a lógica de outro, passando informações de que operações executar.

Selo (dados estruturados):
–

●

Quando dois módulos ou classes compartilham um formato de dados externo, protocolo de comunicação ou interface de dispositivo (Ex
XML, HTTP).

Controle:
–

●

Quando dois módulos ou classes compartilham os mesmos dados globais (Ex. uma variável global). Mudanças nos recursos
compartilhados implicará mudanças em todos os módulos que os utilizam.

Externo:
–

●

Quando um módulo ou classe altera ou depende de uma funcionalidade interna de outro módulo (Ex. acessando dados locais de um
módulo). Uma alteração no modulo de serviço acarretará alterações no módulo dependente.

Quando módulos ou classes compartilham dados via parâmetros. Cada parâmetro é uma parte elementar, sendo esta o único dado
compartilhado entre módulos ou classes (Ex. passando um inteiro para uma função que calcula a raiz quadrada).

Mensagem (baixa):
–

Provê a menor acoplagem onde módulos ou classes não possuem dependências entre si. Ao invés, utilizam uma interface pública para a
troca de mensagens ou eventos.

48
Acoplamento baixo e alto
●

Acoplamento baixo:
–
–

●

O HDD é facilmente substituído;
O HDD é facilmente reutilizável em
outra placa-mãe.

Acoplamento alto:
–

Onde está a placa de vídeo?

–

Ela pode ser substituída
facilmente?
49
Resumo
●

Os princípios fundamentais da OOP são: herança,
encapsulamento, abstração, polimorfismo
–
–

Abstração e encapsulamento escondem dados internos e
permitem trabalhar com interfaces abstratas;

–

●

Herança permite herdar membros de outra classe;

Polimorfismo permite trabalhar com objetos através de sua
interface pai e invocar ações abstratas;

Forte coesão e baixo acoplamento evitam código
espaguete.
50

Mais conteúdo relacionado

Mais procurados

Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
Caveiras
 
Programação Orientada a objetos em Java
Programação Orientada a objetos em JavaProgramação Orientada a objetos em Java
Programação Orientada a objetos em Java
Denis L Presciliano
 
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
Leinylson Fontinele
 
02 - Orientação a objetos e revisão de C# v1.5
02 - Orientação a objetos e revisão de C# v1.502 - Orientação a objetos e revisão de C# v1.5
02 - Orientação a objetos e revisão de C# v1.5
César Augusto Pessôa
 
Programação Orientada a Objetos
Programação Orientada a ObjetosProgramação Orientada a Objetos
Programação Orientada a Objetos
Igor Takenami
 
POO - Aula 09 - Herança
POO - Aula 09 - HerançaPOO - Aula 09 - Herança
POO - Aula 09 - Herança
Felipe J. R. Vieira
 
Paradigmas de programação
Paradigmas de programaçãoParadigmas de programação
Paradigmas de programação
Sérgio Souza Costa
 
Introducao a Arquitetura de Software
Introducao a Arquitetura de SoftwareIntroducao a Arquitetura de Software
Introducao a Arquitetura de Software
UFPA
 
Programação Concorrente - Introdução
Programação Concorrente - IntroduçãoProgramação Concorrente - Introdução
Programação Concorrente - Introdução
Fabio Moura Pereira
 
POO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a ObjetosPOO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a Objetos
Ludimila Monjardim Casagrande
 
Uml Diagramas Estruturais
Uml   Diagramas EstruturaisUml   Diagramas Estruturais
Uml Diagramas Estruturais
thaisedd
 
Algoritmos e lp parte3-pseudocódigo
Algoritmos e lp parte3-pseudocódigoAlgoritmos e lp parte3-pseudocódigo
Algoritmos e lp parte3-pseudocódigo
Mauro Pereira
 
Introdução a programação Orientada a Objeto
Introdução a programação Orientada a ObjetoIntrodução a programação Orientada a Objeto
Introdução a programação Orientada a Objeto
Marconi Rodrigues
 
Programação Orientado a Objetos
Programação Orientado a ObjetosProgramação Orientado a Objetos
Programação Orientado a Objetos
Jéssica Nathany Carvalho Freitas
 
POO - 10 - Herança
POO - 10 - HerançaPOO - 10 - Herança
POO - 10 - Herança
Ludimila Monjardim Casagrande
 
Curso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e StreamsCurso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e Streams
Helder da Rocha
 
JAVA - Herança
JAVA - HerançaJAVA - Herança
JAVA - Herança
Elaine Cecília Gatto
 
Arquitetura paralela
Arquitetura paralelaArquitetura paralela
Arquitetura paralela
Verônica Veiga
 
Padrões-09 - Padrões Criacionais - Factory Method
Padrões-09 - Padrões Criacionais - Factory MethodPadrões-09 - Padrões Criacionais - Factory Method
Padrões-09 - Padrões Criacionais - Factory Method
Eduardo Nicola F. Zagari
 
Metodologias de Desenvolvimento de Software
Metodologias de Desenvolvimento de SoftwareMetodologias de Desenvolvimento de Software
Metodologias de Desenvolvimento de Software
Álvaro Farias Pinheiro
 

Mais procurados (20)

Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
 
Programação Orientada a objetos em Java
Programação Orientada a objetos em JavaProgramação Orientada a objetos em Java
Programação Orientada a objetos em Java
 
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
 
02 - Orientação a objetos e revisão de C# v1.5
02 - Orientação a objetos e revisão de C# v1.502 - Orientação a objetos e revisão de C# v1.5
02 - Orientação a objetos e revisão de C# v1.5
 
Programação Orientada a Objetos
Programação Orientada a ObjetosProgramação Orientada a Objetos
Programação Orientada a Objetos
 
POO - Aula 09 - Herança
POO - Aula 09 - HerançaPOO - Aula 09 - Herança
POO - Aula 09 - Herança
 
Paradigmas de programação
Paradigmas de programaçãoParadigmas de programação
Paradigmas de programação
 
Introducao a Arquitetura de Software
Introducao a Arquitetura de SoftwareIntroducao a Arquitetura de Software
Introducao a Arquitetura de Software
 
Programação Concorrente - Introdução
Programação Concorrente - IntroduçãoProgramação Concorrente - Introdução
Programação Concorrente - Introdução
 
POO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a ObjetosPOO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a Objetos
 
Uml Diagramas Estruturais
Uml   Diagramas EstruturaisUml   Diagramas Estruturais
Uml Diagramas Estruturais
 
Algoritmos e lp parte3-pseudocódigo
Algoritmos e lp parte3-pseudocódigoAlgoritmos e lp parte3-pseudocódigo
Algoritmos e lp parte3-pseudocódigo
 
Introdução a programação Orientada a Objeto
Introdução a programação Orientada a ObjetoIntrodução a programação Orientada a Objeto
Introdução a programação Orientada a Objeto
 
Programação Orientado a Objetos
Programação Orientado a ObjetosProgramação Orientado a Objetos
Programação Orientado a Objetos
 
POO - 10 - Herança
POO - 10 - HerançaPOO - 10 - Herança
POO - 10 - Herança
 
Curso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e StreamsCurso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e Streams
 
JAVA - Herança
JAVA - HerançaJAVA - Herança
JAVA - Herança
 
Arquitetura paralela
Arquitetura paralelaArquitetura paralela
Arquitetura paralela
 
Padrões-09 - Padrões Criacionais - Factory Method
Padrões-09 - Padrões Criacionais - Factory MethodPadrões-09 - Padrões Criacionais - Factory Method
Padrões-09 - Padrões Criacionais - Factory Method
 
Metodologias de Desenvolvimento de Software
Metodologias de Desenvolvimento de SoftwareMetodologias de Desenvolvimento de Software
Metodologias de Desenvolvimento de Software
 

Destaque

Introdução ao Desenvolvimento WEB
Introdução ao Desenvolvimento WEBIntrodução ao Desenvolvimento WEB
Introdução ao Desenvolvimento WEB
Tony Alexander Hild
 
Paradigma funcional
Paradigma funcionalParadigma funcional
Paradigma funcional
Tony Alexander Hild
 
3 orientacao-objetos
3 orientacao-objetos3 orientacao-objetos
3 orientacao-objetos
Thiago Oliveira
 
Exercicio classes
Exercicio classesExercicio classes
Exercicio classes
feiosanelma
 
Lod law of demeter
Lod law of demeterLod law of demeter
Lod law of demeter
Engenharia de Software Ágil
 
Exercícios de programação orientado a objeto
Exercícios de programação orientado a objetoExercícios de programação orientado a objeto
Exercícios de programação orientado a objeto
Gleyciana Garrido
 
Orientação a Objetos (2)
Orientação a Objetos (2)Orientação a Objetos (2)
Orientação a Objetos (2)
Fábio Nogueira de Lucena
 
Padrões de design orientado a objetos
Padrões de design orientado a objetosPadrões de design orientado a objetos
Padrões de design orientado a objetos
Glauco Vinicius Argentino de Oliveira
 
Exercicios professor marcos monteiro (1)
Exercicios professor marcos monteiro (1)Exercicios professor marcos monteiro (1)
Exercicios professor marcos monteiro (1)
jose-junior89
 
Exercicios Analise e Desenvolvimento de projetos
Exercicios Analise e Desenvolvimento de projetosExercicios Analise e Desenvolvimento de projetos
Exercicios Analise e Desenvolvimento de projetos
Roberto Ferreira
 
Lançamento Bahia Análise & Dados - Biodiversidade
Lançamento Bahia Análise & Dados - BiodiversidadeLançamento Bahia Análise & Dados - Biodiversidade
Lançamento Bahia Análise & Dados - Biodiversidade
Daniel Soto
 
Daniel apresentando: Victor Margolin e A Política do Artificial
Daniel apresentando: Victor Margolin e A Política do ArtificialDaniel apresentando: Victor Margolin e A Política do Artificial
Daniel apresentando: Victor Margolin e A Política do Artificial
Daniel Soto
 
CEAD 2013 - Oficina 1: Ferramentas colaborativas e de comunicação WEB
CEAD 2013 - Oficina 1: Ferramentas colaborativas e de comunicação WEBCEAD 2013 - Oficina 1: Ferramentas colaborativas e de comunicação WEB
CEAD 2013 - Oficina 1: Ferramentas colaborativas e de comunicação WEB
Tony Alexander Hild
 
Palestra - design e mercado de trabalho
Palestra - design e mercado de trabalhoPalestra - design e mercado de trabalho
Palestra - design e mercado de trabalho
Daniel Soto
 
Webdesign - Gestão Profissional
Webdesign - Gestão ProfissionalWebdesign - Gestão Profissional
Webdesign - Gestão Profissional
Daniel Soto
 
Portfolio Daniel Soto 2011
Portfolio Daniel Soto 2011Portfolio Daniel Soto 2011
Portfolio Daniel Soto 2011
Daniel Soto
 
Árvore do site
Árvore do siteÁrvore do site
Árvore do site
Daniel Soto
 
Aps lista de exercícios
Aps lista de exercíciosAps lista de exercícios
Aps lista de exercícios
Guilherme
 
POO - 03 - Alocação de Memória em Java
POO - 03 - Alocação de Memória em JavaPOO - 03 - Alocação de Memória em Java
POO - 03 - Alocação de Memória em Java
Ludimila Monjardim Casagrande
 
Design Webdesign
Design WebdesignDesign Webdesign
Design Webdesign
Daniel Soto
 

Destaque (20)

Introdução ao Desenvolvimento WEB
Introdução ao Desenvolvimento WEBIntrodução ao Desenvolvimento WEB
Introdução ao Desenvolvimento WEB
 
Paradigma funcional
Paradigma funcionalParadigma funcional
Paradigma funcional
 
3 orientacao-objetos
3 orientacao-objetos3 orientacao-objetos
3 orientacao-objetos
 
Exercicio classes
Exercicio classesExercicio classes
Exercicio classes
 
Lod law of demeter
Lod law of demeterLod law of demeter
Lod law of demeter
 
Exercícios de programação orientado a objeto
Exercícios de programação orientado a objetoExercícios de programação orientado a objeto
Exercícios de programação orientado a objeto
 
Orientação a Objetos (2)
Orientação a Objetos (2)Orientação a Objetos (2)
Orientação a Objetos (2)
 
Padrões de design orientado a objetos
Padrões de design orientado a objetosPadrões de design orientado a objetos
Padrões de design orientado a objetos
 
Exercicios professor marcos monteiro (1)
Exercicios professor marcos monteiro (1)Exercicios professor marcos monteiro (1)
Exercicios professor marcos monteiro (1)
 
Exercicios Analise e Desenvolvimento de projetos
Exercicios Analise e Desenvolvimento de projetosExercicios Analise e Desenvolvimento de projetos
Exercicios Analise e Desenvolvimento de projetos
 
Lançamento Bahia Análise & Dados - Biodiversidade
Lançamento Bahia Análise & Dados - BiodiversidadeLançamento Bahia Análise & Dados - Biodiversidade
Lançamento Bahia Análise & Dados - Biodiversidade
 
Daniel apresentando: Victor Margolin e A Política do Artificial
Daniel apresentando: Victor Margolin e A Política do ArtificialDaniel apresentando: Victor Margolin e A Política do Artificial
Daniel apresentando: Victor Margolin e A Política do Artificial
 
CEAD 2013 - Oficina 1: Ferramentas colaborativas e de comunicação WEB
CEAD 2013 - Oficina 1: Ferramentas colaborativas e de comunicação WEBCEAD 2013 - Oficina 1: Ferramentas colaborativas e de comunicação WEB
CEAD 2013 - Oficina 1: Ferramentas colaborativas e de comunicação WEB
 
Palestra - design e mercado de trabalho
Palestra - design e mercado de trabalhoPalestra - design e mercado de trabalho
Palestra - design e mercado de trabalho
 
Webdesign - Gestão Profissional
Webdesign - Gestão ProfissionalWebdesign - Gestão Profissional
Webdesign - Gestão Profissional
 
Portfolio Daniel Soto 2011
Portfolio Daniel Soto 2011Portfolio Daniel Soto 2011
Portfolio Daniel Soto 2011
 
Árvore do site
Árvore do siteÁrvore do site
Árvore do site
 
Aps lista de exercícios
Aps lista de exercíciosAps lista de exercícios
Aps lista de exercícios
 
POO - 03 - Alocação de Memória em Java
POO - 03 - Alocação de Memória em JavaPOO - 03 - Alocação de Memória em Java
POO - 03 - Alocação de Memória em Java
 
Design Webdesign
Design WebdesignDesign Webdesign
Design Webdesign
 

Semelhante a Paradigma Orientado a Objeto

C# básica
C#   básicaC#   básica
Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos
Luis Ferreira
 
Minicurso Objective-C
Minicurso Objective-CMinicurso Objective-C
Minicurso Objective-C
Saulo Arruda
 
SQLAlchemy - Desenvolvendo uma aplicação com Python
SQLAlchemy - Desenvolvendo uma aplicação com Python SQLAlchemy - Desenvolvendo uma aplicação com Python
SQLAlchemy - Desenvolvendo uma aplicação com Python
Filipe Fernandes dos Santos Brasil de Matos
 
Gerenciando aspectos e eventos com Zend Framework 2
Gerenciando aspectos e eventos com Zend Framework 2Gerenciando aspectos e eventos com Zend Framework 2
Gerenciando aspectos e eventos com Zend Framework 2
Flávio Lisboa
 
CURSO DELPHI FUND. CLIENT SERVER (DIURNO)
CURSO DELPHI FUND. CLIENT SERVER (DIURNO) CURSO DELPHI FUND. CLIENT SERVER (DIURNO)
CURSO DELPHI FUND. CLIENT SERVER (DIURNO)
Grupo Treinar
 
(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012
Luís Cobucci
 
Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1
Saulo Arruda
 
Poo (1)
Poo (1)Poo (1)
Poo (1)
Willian Sousa
 
Gwt parte 01
Gwt   parte 01Gwt   parte 01
Gwt parte 01
Rafael Adriano
 
Curso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosCurso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetos
Leonardo Melo Santos
 
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Sérgio Souza Costa
 
Linguagens Poo
Linguagens PooLinguagens Poo
Linguagens Poo
Infogenius
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
Thiago Cifani
 
Aula1
Aula1Aula1
Aula1
mentrixmax
 
Kotlin first
Kotlin firstKotlin first
Kotlin first
Suelen Silva
 
Linguagem c
Linguagem cLinguagem c
Linguagem c
saido_embalo1980
 
Mock objects - Teste de código com dependências
Mock objects - Teste de código com dependênciasMock objects - Teste de código com dependências
Mock objects - Teste de código com dependências
Denis L Presciliano
 
Java e orientação a objetos
Java e orientação a objetosJava e orientação a objetos
Java e orientação a objetos
Frederico Maia Arantes
 
Semana 1 Technocorp
Semana 1 TechnocorpSemana 1 Technocorp
Semana 1 Technocorp
AndreyRodriguesMenez
 

Semelhante a Paradigma Orientado a Objeto (20)

C# básica
C#   básicaC#   básica
C# básica
 
Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos
 
Minicurso Objective-C
Minicurso Objective-CMinicurso Objective-C
Minicurso Objective-C
 
SQLAlchemy - Desenvolvendo uma aplicação com Python
SQLAlchemy - Desenvolvendo uma aplicação com Python SQLAlchemy - Desenvolvendo uma aplicação com Python
SQLAlchemy - Desenvolvendo uma aplicação com Python
 
Gerenciando aspectos e eventos com Zend Framework 2
Gerenciando aspectos e eventos com Zend Framework 2Gerenciando aspectos e eventos com Zend Framework 2
Gerenciando aspectos e eventos com Zend Framework 2
 
CURSO DELPHI FUND. CLIENT SERVER (DIURNO)
CURSO DELPHI FUND. CLIENT SERVER (DIURNO) CURSO DELPHI FUND. CLIENT SERVER (DIURNO)
CURSO DELPHI FUND. CLIENT SERVER (DIURNO)
 
(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012
 
Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1
 
Poo (1)
Poo (1)Poo (1)
Poo (1)
 
Gwt parte 01
Gwt   parte 01Gwt   parte 01
Gwt parte 01
 
Curso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosCurso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetos
 
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
 
Linguagens Poo
Linguagens PooLinguagens Poo
Linguagens Poo
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Aula1
Aula1Aula1
Aula1
 
Kotlin first
Kotlin firstKotlin first
Kotlin first
 
Linguagem c
Linguagem cLinguagem c
Linguagem c
 
Mock objects - Teste de código com dependências
Mock objects - Teste de código com dependênciasMock objects - Teste de código com dependências
Mock objects - Teste de código com dependências
 
Java e orientação a objetos
Java e orientação a objetosJava e orientação a objetos
Java e orientação a objetos
 
Semana 1 Technocorp
Semana 1 TechnocorpSemana 1 Technocorp
Semana 1 Technocorp
 

Mais de Tony Alexander Hild

Circuitos combinacionais
Circuitos combinacionaisCircuitos combinacionais
Circuitos combinacionais
Tony Alexander Hild
 
Circuitos sequenciais
Circuitos sequenciaisCircuitos sequenciais
Circuitos sequenciais
Tony Alexander Hild
 
Circuitos Integrados Digitais
Circuitos Integrados DigitaisCircuitos Integrados Digitais
Circuitos Integrados Digitais
Tony Alexander Hild
 
Simplificação de expressões Booleanas utilizando mapas de Karnaugh
Simplificação de expressões Booleanas utilizando mapas de KarnaughSimplificação de expressões Booleanas utilizando mapas de Karnaugh
Simplificação de expressões Booleanas utilizando mapas de Karnaugh
Tony Alexander Hild
 
Introdução aos Mapas de Karnaugh
Introdução aos Mapas de KarnaughIntrodução aos Mapas de Karnaugh
Introdução aos Mapas de Karnaugh
Tony Alexander Hild
 
Introdução ao paradigma imperativo
Introdução ao paradigma imperativoIntrodução ao paradigma imperativo
Introdução ao paradigma imperativo
Tony Alexander Hild
 
Álgebra Booleana
Álgebra BooleanaÁlgebra Booleana
Álgebra Booleana
Tony Alexander Hild
 
Computação Gráfica - Transformações Geométricas no Plano e no Espaço
Computação Gráfica - Transformações Geométricas no Plano e no EspaçoComputação Gráfica - Transformações Geométricas no Plano e no Espaço
Computação Gráfica - Transformações Geométricas no Plano e no Espaço
Tony Alexander Hild
 
Computação Gráfica - Introdução ao OpenGL
Computação Gráfica - Introdução ao OpenGLComputação Gráfica - Introdução ao OpenGL
Computação Gráfica - Introdução ao OpenGL
Tony Alexander Hild
 
Computação Gráfica - Artquitetura de Dispositivos Gráficos
Computação Gráfica - Artquitetura de Dispositivos GráficosComputação Gráfica - Artquitetura de Dispositivos Gráficos
Computação Gráfica - Artquitetura de Dispositivos Gráficos
Tony Alexander Hild
 
Computação Gráfica - Informações Visuais Óculo-motoras
Computação Gráfica - Informações Visuais Óculo-motorasComputação Gráfica - Informações Visuais Óculo-motoras
Computação Gráfica - Informações Visuais Óculo-motoras
Tony Alexander Hild
 
Computação Gráfica - Percepção Tridimensional
Computação Gráfica - Percepção TridimensionalComputação Gráfica - Percepção Tridimensional
Computação Gráfica - Percepção Tridimensional
Tony Alexander Hild
 
Computação Gráfica - Introdução
Computação Gráfica - IntroduçãoComputação Gráfica - Introdução
Computação Gráfica - Introdução
Tony Alexander Hild
 

Mais de Tony Alexander Hild (13)

Circuitos combinacionais
Circuitos combinacionaisCircuitos combinacionais
Circuitos combinacionais
 
Circuitos sequenciais
Circuitos sequenciaisCircuitos sequenciais
Circuitos sequenciais
 
Circuitos Integrados Digitais
Circuitos Integrados DigitaisCircuitos Integrados Digitais
Circuitos Integrados Digitais
 
Simplificação de expressões Booleanas utilizando mapas de Karnaugh
Simplificação de expressões Booleanas utilizando mapas de KarnaughSimplificação de expressões Booleanas utilizando mapas de Karnaugh
Simplificação de expressões Booleanas utilizando mapas de Karnaugh
 
Introdução aos Mapas de Karnaugh
Introdução aos Mapas de KarnaughIntrodução aos Mapas de Karnaugh
Introdução aos Mapas de Karnaugh
 
Introdução ao paradigma imperativo
Introdução ao paradigma imperativoIntrodução ao paradigma imperativo
Introdução ao paradigma imperativo
 
Álgebra Booleana
Álgebra BooleanaÁlgebra Booleana
Álgebra Booleana
 
Computação Gráfica - Transformações Geométricas no Plano e no Espaço
Computação Gráfica - Transformações Geométricas no Plano e no EspaçoComputação Gráfica - Transformações Geométricas no Plano e no Espaço
Computação Gráfica - Transformações Geométricas no Plano e no Espaço
 
Computação Gráfica - Introdução ao OpenGL
Computação Gráfica - Introdução ao OpenGLComputação Gráfica - Introdução ao OpenGL
Computação Gráfica - Introdução ao OpenGL
 
Computação Gráfica - Artquitetura de Dispositivos Gráficos
Computação Gráfica - Artquitetura de Dispositivos GráficosComputação Gráfica - Artquitetura de Dispositivos Gráficos
Computação Gráfica - Artquitetura de Dispositivos Gráficos
 
Computação Gráfica - Informações Visuais Óculo-motoras
Computação Gráfica - Informações Visuais Óculo-motorasComputação Gráfica - Informações Visuais Óculo-motoras
Computação Gráfica - Informações Visuais Óculo-motoras
 
Computação Gráfica - Percepção Tridimensional
Computação Gráfica - Percepção TridimensionalComputação Gráfica - Percepção Tridimensional
Computação Gráfica - Percepção Tridimensional
 
Computação Gráfica - Introdução
Computação Gráfica - IntroduçãoComputação Gráfica - Introdução
Computação Gráfica - Introdução
 

Último

planejamento maternal 2 atualizado.pdf e
planejamento maternal 2 atualizado.pdf eplanejamento maternal 2 atualizado.pdf e
planejamento maternal 2 atualizado.pdf e
HelenStefany
 
Como montar o mapa conceitual editado.pdf
Como montar o mapa conceitual editado.pdfComo montar o mapa conceitual editado.pdf
Como montar o mapa conceitual editado.pdf
AlineOliveira625820
 
Gênero Textual sobre Crônicas, 8º e 9º
Gênero Textual sobre Crônicas,  8º e  9ºGênero Textual sobre Crônicas,  8º e  9º
Gênero Textual sobre Crônicas, 8º e 9º
sjcelsorocha
 
Caça-palavaras e cruzadinha - Dígrafos.
Caça-palavaras  e cruzadinha  - Dígrafos.Caça-palavaras  e cruzadinha  - Dígrafos.
Caça-palavaras e cruzadinha - Dígrafos.
Mary Alvarenga
 
REGULAMENTO DO CONCURSO DESENHOS AFRO/2024 - 14ª edição - CEIRI /UREI (ficha...
REGULAMENTO  DO CONCURSO DESENHOS AFRO/2024 - 14ª edição - CEIRI /UREI (ficha...REGULAMENTO  DO CONCURSO DESENHOS AFRO/2024 - 14ª edição - CEIRI /UREI (ficha...
REGULAMENTO DO CONCURSO DESENHOS AFRO/2024 - 14ª edição - CEIRI /UREI (ficha...
Eró Cunha
 
Slides Lição 12, Central Gospel, O Milênio, 1Tr24, Pr Henrique.pptx
Slides Lição 12, Central Gospel, O Milênio, 1Tr24, Pr Henrique.pptxSlides Lição 12, Central Gospel, O Milênio, 1Tr24, Pr Henrique.pptx
Slides Lição 12, Central Gospel, O Milênio, 1Tr24, Pr Henrique.pptx
LuizHenriquedeAlmeid6
 
A influência do comércio eletrônico no processo de gestão das livrarias e edi...
A influência do comércio eletrônico no processo de gestão das livrarias e edi...A influência do comércio eletrônico no processo de gestão das livrarias e edi...
A influência do comércio eletrônico no processo de gestão das livrarias e edi...
AntonioLobosco3
 
UFCD_7211_Os sistemas do corpo humano_ imunitário, circulatório, respiratório...
UFCD_7211_Os sistemas do corpo humano_ imunitário, circulatório, respiratório...UFCD_7211_Os sistemas do corpo humano_ imunitário, circulatório, respiratório...
UFCD_7211_Os sistemas do corpo humano_ imunitário, circulatório, respiratório...
Manuais Formação
 
PP Slides Lição 11, Betel, Ordenança para exercer a fé, 2Tr24.pptx
PP Slides Lição 11, Betel, Ordenança para exercer a fé, 2Tr24.pptxPP Slides Lição 11, Betel, Ordenança para exercer a fé, 2Tr24.pptx
PP Slides Lição 11, Betel, Ordenança para exercer a fé, 2Tr24.pptx
LuizHenriquedeAlmeid6
 
TREINAMENTO DE BRIGADA DE INCENDIO BRIGADA CCB 2023.pptx
TREINAMENTO DE BRIGADA DE INCENDIO BRIGADA CCB 2023.pptxTREINAMENTO DE BRIGADA DE INCENDIO BRIGADA CCB 2023.pptx
TREINAMENTO DE BRIGADA DE INCENDIO BRIGADA CCB 2023.pptx
erssstcontato
 
Curativo de cateter venoso central na UTI.pdf
Curativo de cateter venoso central na UTI.pdfCurativo de cateter venoso central na UTI.pdf
Curativo de cateter venoso central na UTI.pdf
BiancaCristina75
 
Tudo sobre a Inglaterra, curiosidades, moeda.pptx
Tudo sobre a Inglaterra, curiosidades, moeda.pptxTudo sobre a Inglaterra, curiosidades, moeda.pptx
Tudo sobre a Inglaterra, curiosidades, moeda.pptx
IACEMCASA
 
Atividade Bio evolução e especiação .docx
Atividade Bio evolução e especiação .docxAtividade Bio evolução e especiação .docx
Atividade Bio evolução e especiação .docx
MARCELARUBIAGAVA
 
UFCD_3546_Prevenção e primeiros socorros_geriatria.pdf
UFCD_3546_Prevenção e primeiros socorros_geriatria.pdfUFCD_3546_Prevenção e primeiros socorros_geriatria.pdf
UFCD_3546_Prevenção e primeiros socorros_geriatria.pdf
Manuais Formação
 
7 ano - Rede e hierarquia urbana - Geografia - Alpha.pptx
7 ano - Rede e hierarquia urbana - Geografia - Alpha.pptx7 ano - Rede e hierarquia urbana - Geografia - Alpha.pptx
7 ano - Rede e hierarquia urbana - Geografia - Alpha.pptx
alphabarros2
 
Apostila-Microbiologia-e-Parasitologia-doc.pdf
Apostila-Microbiologia-e-Parasitologia-doc.pdfApostila-Microbiologia-e-Parasitologia-doc.pdf
Apostila-Microbiologia-e-Parasitologia-doc.pdf
bmgrama
 
PALAVRA SECRETA - ALFABETIZAÇÃO- REFORÇO
PALAVRA SECRETA - ALFABETIZAÇÃO- REFORÇOPALAVRA SECRETA - ALFABETIZAÇÃO- REFORÇO
PALAVRA SECRETA - ALFABETIZAÇÃO- REFORÇO
ARIADNEMARTINSDACRUZ
 
Aula de fundamentos de Programação Orientada a Objeto na linguagem de program...
Aula de fundamentos de Programação Orientada a Objeto na linguagem de program...Aula de fundamentos de Programação Orientada a Objeto na linguagem de program...
Aula de fundamentos de Programação Orientada a Objeto na linguagem de program...
samucajaime015
 
Tabela Funções Orgânicas.pdfnsknsknksnksn nkasn
Tabela Funções Orgânicas.pdfnsknsknksnksn nkasnTabela Funções Orgânicas.pdfnsknsknksnksn nkasn
Tabela Funções Orgânicas.pdfnsknsknksnksn nkasn
CarlosJean21
 
AUTISMO LEGAL - DIREITOS DOS AUTISTAS- LEGISLAÇÃO
AUTISMO LEGAL - DIREITOS DOS AUTISTAS- LEGISLAÇÃOAUTISMO LEGAL - DIREITOS DOS AUTISTAS- LEGISLAÇÃO
AUTISMO LEGAL - DIREITOS DOS AUTISTAS- LEGISLAÇÃO
FernandaOliveira758273
 

Último (20)

planejamento maternal 2 atualizado.pdf e
planejamento maternal 2 atualizado.pdf eplanejamento maternal 2 atualizado.pdf e
planejamento maternal 2 atualizado.pdf e
 
Como montar o mapa conceitual editado.pdf
Como montar o mapa conceitual editado.pdfComo montar o mapa conceitual editado.pdf
Como montar o mapa conceitual editado.pdf
 
Gênero Textual sobre Crônicas, 8º e 9º
Gênero Textual sobre Crônicas,  8º e  9ºGênero Textual sobre Crônicas,  8º e  9º
Gênero Textual sobre Crônicas, 8º e 9º
 
Caça-palavaras e cruzadinha - Dígrafos.
Caça-palavaras  e cruzadinha  - Dígrafos.Caça-palavaras  e cruzadinha  - Dígrafos.
Caça-palavaras e cruzadinha - Dígrafos.
 
REGULAMENTO DO CONCURSO DESENHOS AFRO/2024 - 14ª edição - CEIRI /UREI (ficha...
REGULAMENTO  DO CONCURSO DESENHOS AFRO/2024 - 14ª edição - CEIRI /UREI (ficha...REGULAMENTO  DO CONCURSO DESENHOS AFRO/2024 - 14ª edição - CEIRI /UREI (ficha...
REGULAMENTO DO CONCURSO DESENHOS AFRO/2024 - 14ª edição - CEIRI /UREI (ficha...
 
Slides Lição 12, Central Gospel, O Milênio, 1Tr24, Pr Henrique.pptx
Slides Lição 12, Central Gospel, O Milênio, 1Tr24, Pr Henrique.pptxSlides Lição 12, Central Gospel, O Milênio, 1Tr24, Pr Henrique.pptx
Slides Lição 12, Central Gospel, O Milênio, 1Tr24, Pr Henrique.pptx
 
A influência do comércio eletrônico no processo de gestão das livrarias e edi...
A influência do comércio eletrônico no processo de gestão das livrarias e edi...A influência do comércio eletrônico no processo de gestão das livrarias e edi...
A influência do comércio eletrônico no processo de gestão das livrarias e edi...
 
UFCD_7211_Os sistemas do corpo humano_ imunitário, circulatório, respiratório...
UFCD_7211_Os sistemas do corpo humano_ imunitário, circulatório, respiratório...UFCD_7211_Os sistemas do corpo humano_ imunitário, circulatório, respiratório...
UFCD_7211_Os sistemas do corpo humano_ imunitário, circulatório, respiratório...
 
PP Slides Lição 11, Betel, Ordenança para exercer a fé, 2Tr24.pptx
PP Slides Lição 11, Betel, Ordenança para exercer a fé, 2Tr24.pptxPP Slides Lição 11, Betel, Ordenança para exercer a fé, 2Tr24.pptx
PP Slides Lição 11, Betel, Ordenança para exercer a fé, 2Tr24.pptx
 
TREINAMENTO DE BRIGADA DE INCENDIO BRIGADA CCB 2023.pptx
TREINAMENTO DE BRIGADA DE INCENDIO BRIGADA CCB 2023.pptxTREINAMENTO DE BRIGADA DE INCENDIO BRIGADA CCB 2023.pptx
TREINAMENTO DE BRIGADA DE INCENDIO BRIGADA CCB 2023.pptx
 
Curativo de cateter venoso central na UTI.pdf
Curativo de cateter venoso central na UTI.pdfCurativo de cateter venoso central na UTI.pdf
Curativo de cateter venoso central na UTI.pdf
 
Tudo sobre a Inglaterra, curiosidades, moeda.pptx
Tudo sobre a Inglaterra, curiosidades, moeda.pptxTudo sobre a Inglaterra, curiosidades, moeda.pptx
Tudo sobre a Inglaterra, curiosidades, moeda.pptx
 
Atividade Bio evolução e especiação .docx
Atividade Bio evolução e especiação .docxAtividade Bio evolução e especiação .docx
Atividade Bio evolução e especiação .docx
 
UFCD_3546_Prevenção e primeiros socorros_geriatria.pdf
UFCD_3546_Prevenção e primeiros socorros_geriatria.pdfUFCD_3546_Prevenção e primeiros socorros_geriatria.pdf
UFCD_3546_Prevenção e primeiros socorros_geriatria.pdf
 
7 ano - Rede e hierarquia urbana - Geografia - Alpha.pptx
7 ano - Rede e hierarquia urbana - Geografia - Alpha.pptx7 ano - Rede e hierarquia urbana - Geografia - Alpha.pptx
7 ano - Rede e hierarquia urbana - Geografia - Alpha.pptx
 
Apostila-Microbiologia-e-Parasitologia-doc.pdf
Apostila-Microbiologia-e-Parasitologia-doc.pdfApostila-Microbiologia-e-Parasitologia-doc.pdf
Apostila-Microbiologia-e-Parasitologia-doc.pdf
 
PALAVRA SECRETA - ALFABETIZAÇÃO- REFORÇO
PALAVRA SECRETA - ALFABETIZAÇÃO- REFORÇOPALAVRA SECRETA - ALFABETIZAÇÃO- REFORÇO
PALAVRA SECRETA - ALFABETIZAÇÃO- REFORÇO
 
Aula de fundamentos de Programação Orientada a Objeto na linguagem de program...
Aula de fundamentos de Programação Orientada a Objeto na linguagem de program...Aula de fundamentos de Programação Orientada a Objeto na linguagem de program...
Aula de fundamentos de Programação Orientada a Objeto na linguagem de program...
 
Tabela Funções Orgânicas.pdfnsknsknksnksn nkasn
Tabela Funções Orgânicas.pdfnsknsknksnksn nkasnTabela Funções Orgânicas.pdfnsknsknksnksn nkasn
Tabela Funções Orgânicas.pdfnsknsknksnksn nkasn
 
AUTISMO LEGAL - DIREITOS DOS AUTISTAS- LEGISLAÇÃO
AUTISMO LEGAL - DIREITOS DOS AUTISTAS- LEGISLAÇÃOAUTISMO LEGAL - DIREITOS DOS AUTISTAS- LEGISLAÇÃO
AUTISMO LEGAL - DIREITOS DOS AUTISTAS- LEGISLAÇÃO
 

Paradigma Orientado a Objeto

  • 1. Paradigma Orientado a Objeto Prof. Tony Alexander Hild Paradigmas de Linguagem de Programação – 3 CC – Unicentro – 2013
  • 3. Linguagens Orientadas a Objeto ● ● ● ● A maioria das linguagens orientadas a objeto são linguagens de alto nível; O foco das linguagens OO não é na estrutura, mas na modelagem dos dados; Programadores codificam usando “plantas” de modelos de dados chamados classes; Exemplos de linguagens de programação OO incluem C++, Java, C#, Visual Basic. Net, Ruby, Smalltalk, etc. 3
  • 4. Conceitos Gerais de Linguagens Orientadas a Objeto ● ● Objeto – Entidade de programação que contém métodos e atributos e pode reagir a eventos. Método – Coisas que o objeto pode fazer. São os “verbos” dos objetos. No código, geralmente são identificados por uma palavra de “ação”, i.e. Show, Hide, Calculate, Delete, etc. 4
  • 5. Conceitos Gerais de Linguagens Orientadas a Objeto ● ● Atributos – Coisas que descrevem um objeto. São os “adjetivos” dos objetos. No código são geralmente identificados por uma palavra “descritiva”, i.e. Enabled, BackColor, etc. Eventos – Forças externas a um objeto ao qual esse objeto pode reagir. No código, geralmente são atrelados a um procedimento de evento. 5
  • 6. Conceitos Gerais de Linguagens Orientadas a Objeto ● Classe – Fornece uma maneira para criar novos objetos com base em uma "meta definição" de um objeto: – ● Exemplo: A classe Automóvel Construtores – Métodos especiais utilizados para criar novas instâncias de uma classe: – Exemplo: um Honda Civic é uma instância da classe Automóvel. 6
  • 7. public delegate void BuzinarHandler<T>(T emissor, string som); public class Automovel { public string Modelo; public int Ano; public Color Cor; private bool EstaLigado = false; private int Velocidade = 0; public event BuzinarHandler<Automovel> Buzinar; Atributos Evento public Automovel () { } public void Ligar () { EstaLigado = true; } Classe Construtor public void Desligar () { EstaLigado = false; } public void Acelerar () { Velocidade++; } Métodos public void Frear () { Velocidade--; } public void ApertarBuzina () { Buzinar(this, "Beep-Beep"); } } 7
  • 8. public class Automovel { public string Modelo; public int Ano; public Color Cor; private bool EstaLigado = false; private int Velocidade = 0; Atributos public event BuzinarHandler<Automovel> Buzinar; Evento Classe public Automovel () { } . . . Construtor } 8
  • 9. public class Automovel { . . . public void Ligar () { EstaLigado = true; } public void Desligar () { EstaLigado = false; } Classe Métodos public void Acelerar () { Velocidade++; } public void Frear () { Velocidade--; } } public void ApertarBuzina () { Buzinar(this, "Beep-Beep"); } 9
  • 10. Objeto ou Instância da classe Automovel var honda_civic = new Automovel () { Ano = 2013, Cor = Color.Black, Modelo = "Honda Civic" }; 10
  • 11. Abstração ● Abstração significa ignorar características, propriedades ou funções irrelevantes e enfatizar as relevantes ... Relevantes à quê? ● ● ... relevantes para o projeto dado (antecipando futura reutilização em projetos similares); Abstração = gerenciar complexidade. 11
  • 12. Abstração ● A abstração é algo que fazemos todos os dias; – – ● Abstraímos as propriedades do objeto, e mantemos apenas o que precisamos; – ● Olhando para um objeto, vemos as coisas sobre ele que têm significado para nós; Por exemplo, alunos têm "nome", mas não "cor dos olhos". Permite representar uma realidade complexa em termos de um modelo simplificado; Abstração destaca as propriedades de uma entidade que precisamos e esconde os outros. 12
  • 13. Encapsulamento ● ● ● Um mecanismo da linguagem para restringir o acesso a alguns dos componentes do objeto; Uma construção da linguagem que facilita o agrupamento de dados com métodos (ou outras funções) que operam nesses dados; Ocultação de Informações. 13
  • 14. Encapsulamento ● ● ● ● A representação interna de um objeto é geralmente escondida da visão externa da definição do objeto (interface); Normalmente, apenas os métodos do próprio objeto podem acessar ou modificar diretamente os seus campos; Algumas linguagens, como Smalltalk e Ruby só permitem o acesso ao estado (atributos/campos) através de métodos; A maioria das outras (por exemplo, C++, C # ou Java) oferecem ao programador um grau de controle sobre as entidades que estão sendo escondidas, normalmente através de palavras-chave como public, private, friend, protected, etc. 14
  • 15. Encapsulamento ● ● ● ● O ponto principal é que, ao pensar o sistema como sendo composto de objetos independentes, mantenham-se as subpartes realmente independentes; Os objetos devem comunicar-se apenas por meio de troca de mensagens bem definidas; Diferentes grupos de programadores podem trabalhar em diferentes partes do projeto, apenas certificando-se de que estejam de acordo com uma interface; É possível construir sistemas maiores com menos esforço. 15
  • 16. Encapsulamento – Benefícios ● Garante que as mudanças estruturais permanecem locais: – – ● Alterando os membros internos de um classe não afeta qualquer código fora da classe; Alterar a implementação dos métodos não modifica a forma dos clientes usá-los. Encapsulamento permite adicionar alguma lógica ao acessar os dados do cliente: – ● Por exemplo: validação ao modificar o valor da propriedade. Ocultando detalhes de implementação reduz a complexidade: – Manutenção mais fácil. 16
  • 17. Encapsulamento - Resumo ● ● ● Encapsulamento esconde os detalhes de implementação; A classe anuncia algumas operações (métodos) disponíveis para seus clientes - a sua interface pública; Todos os membros de dados (campos) de uma classe devem ser escondidos: – Acessados via propriedades (somente leitura e de leitura e escrita); – Nenhum membro da interface deve ser escondido. 17
  • 18. Exemplo de Encapsulamento - C# namespace Encapsulation { class Program { public class Account { private decimal accountBalance = 500.00m; } public decimal CheckBalance () { return accountBalance; } static void Main () { Account myAccount = new Account (); decimal myBalance = myAccount.CheckBalance (); } } } /* This Main method can check the balance via the public * "CheckBalance" method provided by the "Account" class * but it cannot manipulate the value of "accountBalance" */ 18
  • 19. public class Automovel { private bool estaLigado = false; private int velocidade = 0; . . . public void Ligar () { estaLigado = true; } public void Desligar () { estaLigado = false; } public void Acelerar () { velocidade++; } public void Frear () { velocidade--; } public bool EstaLigado() { return estaLigado; } } public bool Velocidade() { return velocidade; } 19
  • 20. Herança ● ● O conceito de herança foi criado em 1968 para a linguagem Simula; Herança é o tema central da programação orientada a a objetos e das linguagens que a suportam; ● Permite aos programadores criar novas classes com base em uma classe existente; ● É um relacionamento IS-A (É-UM); ● A classe pai é também chamada de classe base ou superclasse; ● A classe filha é também chamada de classe derivada ou subclasse; ● A herança permite que subclasses herdem as características da classe pai existente: – Atributos (campos e propriedades); – Operações (métodos). 20
  • 21. Herança ● Novos métodos e atributos podem ser criados na subclasse, sem afetar a definição da classe pai. Por exemplo: – Adicionar novos campos e/ou métodos; – Redefinir métodos, ou seja, modificar o comportamento existente: ● – O novo método sobrescreve o método herdado e passa a ser chamado de método sobrescrito. Redefinir métodos da superclasse somente para os clientes e para a subclasse: ● Modificador new em C#. 21
  • 22. Herança ● Métodos ou funções virtuais são métodos ou funções que podem ter seu comportamento sobrescrito por uma subclasse com um método ou função com a mesma assinatura; – Também é um conceito de polimorfismo; – Despacho dinâmico. 22
  • 23. Herança ● Herança múltipla: – Herança múltipla permite uma nova classe herdar de duas ou mais classes; – Algumas linguagens permitem herança múltipla de classes concretas, e outras somente de interfaces: ● ● ● ● C++, Common Lisp, Eiffel, Scala, OCaml, Pearl, Python permitem herança múltipla de classes concretas; C#, D, Java, Nemerle, Object Pascal (Delphi), Objective-C permitem herança múltipla somente de interfaces; Smalltalk permite apenas herança simples; Em Ruby as classes possuem apenas um pai (superclasse), mas podem herdar de diferentes módulos. 23
  • 24. Herança ● Herança múltipla: – Problema do diamante: ● Se a classe D sobrescrever o método ToString(), de qual classe deve ser sobrescrito? 24
  • 25. Herança ● Herança múltipla: – Desvantagens: ● ● – Complexidade da linguagem e implementação; Potencial ineficiência. Vantagens: ● Às vezes, é bastante conveniente. Quando? 25
  • 26. Herança ● Herança vs. Subtipos: – – Princípio de substituição de Liskov; – Problema Círculo-Elipse ou Quadrado-Retângulo; – ● Subtipos são relacionamentos do tipo É-UM, onde é herdado o comportamento, e não somente uma implementação, como é o caso dos relacionamentos do tipo TEM-UM. Herança de interfaces → a ser visto em polimorfismo. Exemplo de código... 26
  • 27. Herança ● Restrições: – Dependendo da linguagem é possível: ● ● ● ● ● ● Definir classes que não podem ser herdadas; Definir classes abstratas que não podem ser instanciadas, a não ser quando herdadas por outra classe; Criar entidades que não podem ser sobrescritas; Ocultar entidades de seus clientes, mas permitir às suas subclasses vêlos; Esconder entidades de suas subclasses; Final/Sealed/Abstract/Protected. 27
  • 28. Herança ● Benefícios – Herança tem uma série de benefícios; – Extensibilidade; – Aumento de produtividade pode ocorrer com o reúso: ● ● Tipos de dados abstratos são difíceis de reusar − sempre precisam de mudanças; Definições de tipos de dados abstratos são todas independentes e no mesmo nível. – – ● Abstração; Elimina código redundante; Use herança para criar relacionamentos É-UM (IS-A) – ● Por exemplo cão é-um animal (cães são uma espécie de animais) Não usar para criar relacionamentos TEM-UM (HAS-A) – Por exemplo cão tem-um nome (cão não é o tipo nome) 28
  • 29. Herança ● Desvantagens: – Cria dependências entre classes em uma hierarquia; – Pode se tornar extramamente complexa com a adição de diversos níveis; – Diminui a flexibilidade do código. 29
  • 31. //C# abstract class Animal { public string Name; public void Drink() { } public virtual void Eat() { } public void Go() { } } class Cat : Animal { // warning: Esconde o Drink() herdado. Usar new. public void Drink() { } // Sobrescreve o Eat() herdado. public override void Eat() { } // Esconde o Go() herdado. public new void Go() { } } 31
  • 32. // C++ class animal { void /*nonvirtual*/ move() { cout << "This animal moves in some way" << endl; } virtual void eat() {} }; // The class "animal" may possess a declaration for eat() if desired. class fish : public animal { // The non virtual function move() is inherited but cannot be overridden void eat() { cout << "Fish ingest food through the mouth and break it down in the esophagus." << endl; } }; 32
  • 33. Polimorfismo ● Polimorfismo = capacidade de ter mais de uma forma (os objetos têm mais de um tipo); – – ● A classe pode ser usada através de sua interface pai; A classe filha pode substituir alguns dos comportamentos da classe pai. Permite definir e utilizar operações abstratas: – Operações abstratas são definidas na interface da classe base e implementadas nas classes derivadas; ● ● Declarado como abstrato ou virtual. Exemplo de código... 33
  • 34. Polimorfismo ● ● Criação de métodos que descrevem a maneira de fazer alguma função geral (Exemplo: O método "Acelerar" na classe de Veiculo); Métodos polimórficos podem se adaptar a tipos específicos de objetos. 34
  • 35. Polimorfismo ● Porque tratar um objeto de determinado tipo como sendo um objeto de seu tipo base? – Para invocar operações abstratas; – Para misturar diferentes tipos relacionados na mesma coleção: ● Por exemplo List<object> pode conter qualquer coisa. – Para passar objeto mais específico para um método que espera um parâmetro de um tipo mais genérico; – Para declarar um campo mais genérico que será inicializado e "especializado" mais tarde. 35
  • 36. Polimorfismo – Como funciona? ● ● Polimorfismo assegura que o método adequado para a subclasse é chamado através da interface de sua superclasse; Polimorfismo é implementado usando uma técnica chamada de ligação tardia de método (late method binding): – – ● O método exato a ser chamado é determinado em tempo de execução, pouco antes de realizar a chamada; Aplicada a todos os métodos abstract / virtual. Nota: A ligação tardia é mais lenta do que a de ligação normal (early). 36
  • 37. O modificador override - C# ● ● ● ● Usando override podemos modificar um método ou propriedade; Um método override fornece uma nova implementação de um membro herdado de uma classe base; Não é possível substituir um método não-virtual ou estático; O método base substituído deve ser virtual, abstract, ou override. 37
  • 38. Polimorfismo por sobrecarga ● Métodos com o mesmo nome podem ter comportamentos diferentes dependendo dos tipos dos argumentos. program Adhoc; function Add( x, y : Integer ) : Integer; begin Add := x + y end; function Add( s, t : String ) : String; begin Add := Concat( s, t ) end; begin Writeln(Add(1, 2)); Writeln(Add('Hello, ', 'World!')); end. 38
  • 39. Polimorfismo paramétrico ● ● ● ● Conhecido como generics ou templates; Permite que uma função ou um tipo de dados seja escrito genericamente, de modo que ele pode lidar com valores de forma idêntica, sem depender do seu tipo; Torna uma linguagem mais expressiva, mantendo a completa segurança de tipos; Exemplo de código... 39
  • 40. Polimorfismo por subtipos ● Visto anteriormente na herança; ● Utiliza a abstração; ● ● Em algumas linguagens como C# e Java pode ser obtido com a utilização de interfaces; Uma interface é um conjunto de operações (métodos) que determinam o que objeto pode realizar: – – ● Também chamado de "contrato" para o fornecimento de um conjunto de operações; Define o comportamento abstrato. Interfaces fornecem abstrações: – Você não deveria ter que saber nada a respeito sobre a implementação, a fim de utilizá-la. 40
  • 41. Coesão ● ● Coesão descreve o quanto todas as partes em uma classe suportam um propósito bem definido; A coesão deve ser forte: – – ● Abstrações bem definidas mantém uma forte coesão; Classes devem conter funcionalidades fortemente relacionadas, apontando para uma única finalidade. Coesão é uma ferramenta útil para gerenciar a complexidade e aumentar o reúso. 41
  • 42. Coesão ● Coesão é diminuída se: – As funcionalidades embutidas em uma classe, acessado através de seus métodos, têm pouco em comum; – Métodos realizam atividades muitas variadas, muitas vezes usando conjuntos de dados de granulação grossa ou não relacionados. 42
  • 43. Coesão ● As desvantagens da baixa coesão (ou "coesão fraca") são: – Maior dificuldade na compreensão módulos; – Maior dificuldade em manter um sistema, pois as alterações lógicas no domínio afetam vários módulos, e porque mudanças em um módulo exigem mudanças em módulos relacionados; – Maior dificuldade em reutilizar um módulo porque a maioria dos aplicativos não vai precisar do conjunto aleatório de operações previstas naquele módulo. 43
  • 44. Tipos de coesão ● Coesão por coincidência (pior): – ● Coesão lógica: – ● Quando partes de um módulo estão agrupadas porque operam com os mesmos dados (por exemplo, um módulo que opera no mesmo registro de informações) . Coesão sequencial: – ● Quando partes de um módulo estão agrupadas porque eles sempre seguem uma determinada sequência de execução (por exemplo, uma função que verifica as permissões de arquivos e, em seguida, abre o arquivo ). Coesão comunicacional: – ● Quando partes de um módulo estão agrupadas por quando eles são processados (por exemplo, uma função que é chamada após capturar uma exceção que fecha os arquivos abertos, cria um log de erro, e notifica do usuário). Coesão processual: – ● Quando partes de um módulo estão agrupadas porque , logicamente, são categorizados para fazer a mesma coisa , mesmo se eles são diferentes por natureza (por exemplo, agrupar todos rotinas de manipulação de entrada de mouse e teclado ). Coesão temporal: – ● Quando partes de um módulo estão agrupadas de forma arbitrária , a única relação entre as partes é que eles foram agrupados (por exemplo, uma classe "Util" ). Quando partes de um módulo estão agrupadas porque a saída de uma parte é a entrada para outra parte como uma linha de montagem (por exemplo, uma função que lê dados de um arquivo e processa os dados). Coesão funcional (melhor): – Quando as partes de um módulo estão agrupados porque todas elas contribuir para uma única tarefa bem definida do módulo (por exemplo, tokenizing de uma string XML). 44
  • 45. Coesão forte ● Exemplo de coesão forte: – Classe Math que contém métodos: ● ● ● Sin(), Cos(), Asin() Sqrt(), Pow(), Exp() Math.PI, Math.E double sideA = 40, sideB = 69; double angleAB = Math.PI / 3; double sideC = Math.Pow(sideA, 2) + Math.Pow(sideB, 2) 2 * sideA * sideB * Math.Cos(angleAB); double sidesSqrtSum = Math.Sqrt(sideA) + Math.Sqrt(sideB) + Math.Sqrt(sideC); 45
  • 46. Coesão fraca ● Exemplos de coesão fraca: – Classe mágica que contém os seguintes métodos: MagicClass.MakePizza("Fat Pepperoni"); MagicClass.WithdrawMoney(9996.0); MagicClass.OpenDBConnection(); ● Outro exemplo: public void PrintDocument(Document d); public void SendEmail(string recipient, string subject, string text); public void CalculateDistanceBetweenPoints(int x1, int y1, int x2, int y2); 46
  • 47. Acoplamento ● Acoplamento descreve o quão forte é a relação de interdependência de uma classe ou de uma rotina com outras classes ou rotinas; – O acoplamento deve ser mantido solto ou baixo; – Os módulos devem depender pouco uns dos outros; – Todas as classes e rotinas devem ter relações pequenas, diretas, visíveis e flexíveis com outras classes e rotinas; – Um módulo deve ser facilmente utilizada por outros módulos; – Deve ser inversamente proporcional à coesão. 47
  • 48. Tipos de acoplamentos ● Conteúdo (alto): – ● Comum: – ● Quando módulos ou classes compartilham uma estrutura de dados composta e utilizam apenas uma parte da mesma, possivelmente partes diferentes. Dados: – ● Quando um módulo ou classe controla a lógica de outro, passando informações de que operações executar. Selo (dados estruturados): – ● Quando dois módulos ou classes compartilham um formato de dados externo, protocolo de comunicação ou interface de dispositivo (Ex XML, HTTP). Controle: – ● Quando dois módulos ou classes compartilham os mesmos dados globais (Ex. uma variável global). Mudanças nos recursos compartilhados implicará mudanças em todos os módulos que os utilizam. Externo: – ● Quando um módulo ou classe altera ou depende de uma funcionalidade interna de outro módulo (Ex. acessando dados locais de um módulo). Uma alteração no modulo de serviço acarretará alterações no módulo dependente. Quando módulos ou classes compartilham dados via parâmetros. Cada parâmetro é uma parte elementar, sendo esta o único dado compartilhado entre módulos ou classes (Ex. passando um inteiro para uma função que calcula a raiz quadrada). Mensagem (baixa): – Provê a menor acoplagem onde módulos ou classes não possuem dependências entre si. Ao invés, utilizam uma interface pública para a troca de mensagens ou eventos. 48
  • 49. Acoplamento baixo e alto ● Acoplamento baixo: – – ● O HDD é facilmente substituído; O HDD é facilmente reutilizável em outra placa-mãe. Acoplamento alto: – Onde está a placa de vídeo? – Ela pode ser substituída facilmente? 49
  • 50. Resumo ● Os princípios fundamentais da OOP são: herança, encapsulamento, abstração, polimorfismo – – Abstração e encapsulamento escondem dados internos e permitem trabalhar com interfaces abstratas; – ● Herança permite herdar membros de outra classe; Polimorfismo permite trabalhar com objetos através de sua interface pai e invocar ações abstratas; Forte coesão e baixo acoplamento evitam código espaguete. 50