Introdução à Programação Orientada a Objetos Prof. Marcelo Cohen 1. Contextualizando o problema O que leva um programador a mudar do paradigma procedimental para um novo? A resposta esta na complexidade crescente dos sistemas e nas limitações da capacidade humana de compreensão de um sistema como um todo. Sistema complexo = conjunto grande e diverso de comportamentos tendo um longo ciclo de vida e muitos usuários dependendo dele. A complexidade está na quantidade e diversidade. 1
2. Orientação a Objetos Paradigma Paradigma é um conjunto de regras que estabelecem fronteiras e descrevem como resolver os problemas dentro destas fronteiras. Os paradigmas influenciam nossa percepção; ajudam-nos a organizar e a coordenar a maneira como olhamos para o mundo... Reengenharia - Reestruturando a Empresa Daniel Morris e Joel Brandon Como assim??? Em Ciência da Computação: Paradigmas explicam como os elementos que compõem um programa são organizados e como interagem entre si. 2
Orientação a Objetos Conceito No mundo real, tudo é objeto! Os objetos se relacionam entre si de diversas maneiras Orientação a Objetos Conceito (2) Um programa orientado a objetos é estruturado como uma comunidade de agentes que interagem entre si, denominados objetos. Cada objeto tem um papel a cumprir Cada objeto oferece um serviço ou realiza uma ação que é usada por outros membros da comunidade 3
Exemplo real: montagem de um computador Composto por vários componentes: placa-mãe CPU placa de vídeo disco rígido teclado, etc. Cada componente é bastante sofisticado, mas o usuário não precisa saber como funciona internamente. Cada componente é independente dos demais. Para quem está montando, interessa apenas como os componentes interagem entre si: a placa de vídeo encaixa no slot? O monitor funciona com essa placa? A CPU é compatível com a placa-mãe? Objeto - representação Operações / métodos / interface (público) Dados / propriedades / atributos (privado) 4
Exemplo: Lâmpada Operações: ligar desligar Dados: ligada (s/n) potência voltagem Encapsulamento (data hiding) É definido como uma técnica para minimizar as interdependências entre módulos, através da definição de interfaces externas. Caixa preta - não é necessário saber como funciona internamente, mas sim como utilizar. 5
Encapsulamento A interface (pública) de um objeto declara todas as operações permitidas (métodos) Todo o acesso aos dados é feito através da chamada a um método definido pelo objeto Mudanças na implementação interna do objeto (que preservem a sua interface externa) não afetam o resto do sistema Encapsulamento - benefícios Segurança: protege os objetos de terem seus atributos corrompidos por outros objetos. Independência: escondendo seus atributos, um objeto protege outros de complicações de dependência da sua estrutura interna. 6
Mensagens Objetos interagem e se comunicam através de mensagens... Receptor (servidor) Emissor (cliente) Métodos...as mensagens identificam os métodos a serem executados no objeto receptor. 7
Mensagens e Métodos Para invocar um método, deve-se enviar uma mensagem para o objeto desejado Para enviar uma mensagem, deve-se identificar o objeto que receberá a mensagem identificar o método que o objeto deverá executar passar os argumentos requeridos pelo método Abstração Focalizar o essencial, ignorar propriedades acidentais AERONAVE 8
Classes Uma classe determina um conjunto de objetos com: propriedades semelhantes comportamentos semelhantes relacionamentos comuns com outros objetos Objetos ou instâncias classificação instanciação Classe Lamp Atributos ligada potência voltagem Métodos ligar desligar Classe: uma fábrica de objetos Classe Lamp Lamp 3 Lamp 1 Lamp 2 Objetos ou instâncias da classe Lamp 9
Código da Classe Lamp import java.lang.*; class Lamp { private int potencia; private int voltagem; private boolean ligada; public Lamp(int pot,int volt){ potencia = pot; voltagem = volt; public void ligar { ligada = true; public void desligar { Código da Classe Lamp import java.lang.*; class Lamp { private int potencia; private int voltagem; private boolean ligada; public Lamp(int pot,int volt){ potencia = pot; voltagem = volt; Dados / atributos public void ligar { ligada = true; public void desligar { 10
Código da Classe Lamp import java.lang.*; class Lamp { private int potencia; private int voltagem; private boolean ligada; public Lamp(int pot,int volt){ potencia = pot; voltagem = volt; public void ligar { ligada = true; Operações / métodos public void desligar { 11