1 / 104

Programação Orientada a Objetos

Programação Orientada a Objetos. Artur Henrique Kronbauer arturhk@gmail.com. Programa de computador. É um conjunto de comandos e regras que um programador deve conhecer para poder manipular os recursos de um computador. São escritos em uma linguagem de programação.

ikia
Télécharger la présentation

Programação Orientada a Objetos

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programação Orientada a Objetos Artur Henrique Kronbauer arturhk@gmail.com

  2. Programa de computador • É um conjunto de comandos e regras que um programador deve conhecer para poder manipular os recursos de um computador. • São escritos em uma linguagem de programação. • Para que um programa possa ser executado deve ser traduzido para uma linguagem que possa ser compreendida pelo computador através de um compilador.

  3. Programa de computador • Programas processam dados. • O paradigma de programação orientada a objetos considera que os dados a serem processados e os mecanismos de processamento desses dados devem ser considerados em conjunto. • Os modelos representam conjuntamente dados e operações sobre esses dados.

  4. Restaurante Caseiro Hipotético Mesa 1 Mesa 2 Mesa 3 Kg refeição Sobremesa Refrigerante Cerveja Kg refeição Sobremesa Refrigerante Cerveja Kg refeição Sobremesa Refrigerante Cerveja Modelos • Modelos são representações simplificadas de objetos, pessoas, itens, tarefas, processos, conceitos, idéias etc. São usados comumente por pessoas no seu dia-a-dia, independente do uso de computadores.

  5. Modelos e Dados • O quadro branco é um modelo do restaurante, representando de forma simplificada as informações do restaurante necessárias para contabilizar os pedidos. • O modelo representa certos dados ou informações. Os dados contidos no modelo são somente relevantes à abstração do mundo real feita.

  6. Modelos e Operações • Um modelo normalmente contém operações ou procedimentos associados a ele, por exemplo: • Inclusão de um pedido para uma mesa. • Modificação do status de um pedido. • Encerramento dos pedidos de uma mesa. • Também é possível a criação de modelos que possuem somente dados ou somente operações. • Modelos podem conter submodelos e ser parte de outros modelos.

  7. Modelos e Orientação a Objetos • A simplificação inerente aos modelos é, em muitos casos, necessária: dependendo do contexto, algumas informações devem ser ocultas ou ignoradas. • Pessoa como empregado de empresa • Pessoa como paciente de uma clínica médica • Pessoa como contato comercial • A criação e uso de modelos é uma tarefa natural e a extensão desta abordagem à programação deu origem ao paradigma Programação Orientada a Objetos.

  8. Programação Orientada a Objetos • Os modelos baseados em objetos são úteis para compreensão de problemas, para comunicação com os usuários das aplicações, para modelar empresa, projetar programas, etc. • POO é um paradigma de programação de computadores onde se usam classes e objetos, criados a partir dos modelosdescritos anteriormente, para representar e processar dados usando programas de computadores.

  9. Encapsulamento • A capacidade de ocultar dados dentro do modelos, permitindo que somente operações especializadas ou dedicadas manipulem os dados ocultos chama-se encapsulamento. • Encapsulamento é um dos benefícios mais palpáveis da POO. • Modelos que encapsulam os dados possibilitam a criação de programas com menos erros e mais clareza.

  10. Encapsulamento • Modelos podem conter dados para representação das informações ou dados relativos ao que se deseja modelar e operações para manipulação dos dados. • Em muitos casos, será desejável que os dados não possam ser acessados ou usados diretamente, mas somente através das operações. • Por Exemplo: • Máquina fotográfica – o mecanismo da câmera oculta os dados e a maneira como são processados.

  11. Encapsulamento • Em muitos modelos teremos vantagens em usar mecanismos de ocultação de dados: sempre que existir uma maneira de deixar ao modelo a capacidade e responsabilidade pela modificação de um de seus dados, devemos criar uma operação para fazê-lo. • Por exemplo: • Modelo que represente conta bancária e operação de retirada.

  12. Lâmpada estadoDaLampada acende() apaga() mostraEstado() Mais exemplos de modelos • Exemplo 1: Uma lâmpada incandescente • Atenção para os nomes de dados e das operações. • A abrangência do modelo define os dados e operações.

  13. Exemplo 1: em pseudocódigo Modelo Lampada Início do modelo dado estadoDaLampada; operação acende() início estadoDaLampada = aceso; fim operação apaga() início estadoDaLampada = apagado; fim operação mostraEstado() início se (estadoDalampada == aceso) imprime “A lâmpada está acesa” senão imprime “A lâmpada está apagada”; fim Fim do modelo Representa uma lâmpada em uso Acende a Lâmpada Apaga a Lâmpada Mostra o estado da lâmpada

  14. ContaBancariaSimplificada nomeDoCorrentista saldo contaÉEspecial abreConta(nome,deposito,éEspecial) abreContaSimples(nome) deposita(valor) retira(valor) mostraDados() Mais exemplos de modelos • Exemplo 2: Uma conta bancária simplificada • Aspectos práticos de contas reais (senhas, taxas) foram deixados de lado.

  15. Exemplo 2: em pseudocódigo Modelo ContaBancáriaSimplificada Inicio do modelo dado nomeDoCorrentista, saldo, contaÉEspecial ; operação abreConta(nome,deposito,especial) início nomeDoCorrentista = nome; saldo = deposito; contaÉEspecial = especial; fim operação abreContaSimples(nome) início nomeDoCorrentista = nome; saldo = 0.00; contaÉEspecial = false; fim Dados da conta argumentos para a operação Inicializa simultaneamente todos os dados do modelo Inicializa simultaneamente todos os dados do modelo, usando o nome passado como argumento e os outros valores com valores default

  16. Exemplo 2: em pseudocódigo continuação operação deposita(valor) início saldo = saldo + valor; fim operação retira(valor) início se (contaÉEspecial == false) inicio se (valor <= saldo) saldo = saldo – valor; fim senão saldo = saldo - valor; fim operação mostraDados() inicio imprime “o nome do correntista é “ + nomeDoCorrentista; imprime “o saldo é “ + saldo; imprime se (contaEEspecial) imprime “A conta é especial” fim Fim do modelo Deposita um valor na conta Retira um valor na conta A conta não é especial Existe saldo suficiente Conta especial, pode retirar a vontade Mostra os dados imprimindo seus valores

  17. Data dia mês ano inicializaData(d,m,a) dataÉVálida(d,m,a) mostraData() Mais exemplos de modelos • Exemplo 3: Uma data • Consideramos que o valor do mês é um inteiro; • Consideramos também que existem datas válidas e não válidas

  18. Classes e objetos • Programadores que utilizam POO criam e usam objetos a partir de classes, que são relacionadas diretamente com os modelos descritos. • Um objeto ou instância é a materialização da classe. • Classes são estruturas utilizadas para descrever os modelos, ou seja, contém a descrição dos dados (atributos) e das operações (métodos) que podem ser realizadas sobre eles. Nome da Classe Atributo 1 Atributo 2 Atributo 3 • • • Método 1 Método 2 • • •

  19. Classes e objetos • Os dados contidos em uma classe são conhecidos como campos ou atributos daquela classe. • Cada campo deve ter um nome e ser de um tipo de dado nativo ou uma classe existente. • Valores dentro de classes podem ser variáveis. • As operações contidas são os métodos. • Métodospodem receber argumentos (parâmetros). • O nome mais os parâmetros do método são chamados de assinatura.

  20. Classes e objetos • Para que objetos ou instâncias possam ser manipulados, é necessária a criação de referências a estes objetos, que são variáveis do “tipo” da classe. • Classe -> Planta do edifício, que descreve o edifício, mas não corresponde fisicamente a ele. • Instância -> Edifício construído. • Referência -> Nome do Objeto (ilhaDoSol) Edifício ilhaDoSol Edifício iguatemi Edifício palaci Classe Edifício instâncias

  21. Classes em Java – Sintaxe Básica • Uma classe em Java será declarada com a palavra-chave class seguida do nome da classe. • O nome não pode conter espaços. • Deve começar com uma letra. • Deve ser diferente das palavras reservadas. • Caracteres maiúsculos e minúsculos são diferenciados. • Conteúdo da classe limitado pelas chaves { }. • Exemplo: class Empregado { String Nome; public String ApresentarNome( ) { return Nome; } } Nome da classe Atributo Método

  22. Classes em Java - Palavras Reservadas abstract boolean break byte case catch char class const Continue default do double else extends false final finally float for if implements import instanceof int interface long native new null package private protected public return short static super switch Syncronyzed this throw throws transient true try void while

  23. Classes em Java - Campos da Classe • Os campos das classes (atributos) devem ser declarados dentro do corpo da classe. • Cada campo deve ser representado por um determinado tipo de dado. • Em linguagens OO, é possível declarar campos como referências a instâncias de outras classes já existentes (Objetos). • Também é possível declarar campos de tipos primitivos da própria linguagem (Variáveis).

  24. Classes em Java – Declaração de Campos • A declaração é simples, basta declarar o tipo de dado, seguido dos nomes dos campos que são daquele tipo. • Podemos observar que, para cada dado do modelo existe um campo correspondente na classe. • Campos podem ser referências a uma classe. • Exemplo: class DataSimples

  25. Classes em Java – Tipos Primitivos (nativos) • A classe String é usada para representar cadeias de caracteres. (Não são dados nativos, sendo instâncias da classe String)

  26. Classes em Java – Operadores Aritméticos • Operadores Aritméticos • + (soma) • - (subtração) • * (multiplicação) • / (divisão) • % (resto de uma divisão inteira) • int(A) / int(B) (parte inteira de uma divisão) • Operação com instâncias da classe String. • + (concatenação)

  27. Classes em Java - Conversões entre tipos numéricos • Conversão entre Tipos Numéricos: Sempre que for realizada uma operação numérica (+, -, *, /) entre dois tipos diferentes será considerado como se os operadores fossem do mesmo tipo. Para isso, o operador de maior capacidade dita o tipo a ser considerado. byte  short  int  long  float  double • Conversões Explicitas: Para fazer conversões que não seguem a regra anterior é necessário realizar conversões explicitar, veja o exemplo: double x = 9.997; • int nx = (int) x; Resultado após a conversão  nx = 9 Maior Menor Sintaxe para uma conversão Explicita

  28. Classes em Java - Métodos de Classes • A maioria das classes representa modelos que tem dados e operações que manipulam esses dados. • As operações são chamadas de métodos. • Métodos não podem ser criados dentro de outros métodos, nem fora da classe à qual pertencem. • Exemplo: class DataSimples

  29. Classes em Java – Exemplo DataSimples class DataSimples { byte dia,mes; short ano; void inicializaDataSimples(byte d,byte m,short a) { if (dataEValida(d,m,a) == true) { dia = d; mes=m; ano=a; } else { dia = 0; mes=0; ano=0; } } boolean dataEValida(byte d,byte m,short a) { if ((d>=1) && (d<=31) && (m>=1) && (m<=12)) return true; else return false; } Tipos primitivos definidos como atributos (variáveis) Método da classe Parâmetros baseados em tipos primitivos Método da classe

  30. Classes em Java – Exemplo DataSimples boolean eIgual(DataSimples outraDataSimples) { if ((dia == outraDataSimples.dia) && ( mes == outraDataSimples.mes) && (ano == outraDataSimples.ano)) return true; else return false; } void mostraDataSimples() { System.out.println(dia + “/” + mês + “/” + ano); } } Parâmetros baseados em um objeto da própria classe Método da classe

  31. Classes Java – Escopo de Variáveis e Objetos • O escopo dos campos e variáveis dentro de uma classe determina a sua visibilidade. • Campos declarados em uma classe são válidos por toda a classe, mesmo que os campos estejam declarados depois dos métodos que os usam. • Variáveis e instâncias de objetos declarados dentro de métodos só serão válidos dentro desse método. • Dentro de métodos e blocos de comandos, as variáveis e objetos devem ser declarados antes de serem utilizadas. • Variáveis passadas como argumentos para métodos só são válidas dentro dos métodos. • Exemplo: class Data

  32. Classes em Java – Modificadores de Acesso • Modificadores de acesso podem ser usados tanto em campos como em métodos de uma classe. • O objetivo é proteger a integridade e a consistência dos dados e operações que uma determinada classe manipula. • Exemplo de Proteção aos Atributos (dados) • Por exemplo na classe dataSimples analisada anteriormente, observamos que ao ser inicializada uma data, os campos dia, mês e ano passam por um processo de consistência, ao ser chamado o método dataEValida. • Entretanto, como não são usados modificadores, não podemos garantir que sempre as datas serão validadas, pois os campos da classe podem ser acessados diretamente, sem a utilização dos métodos da classe.

  33. Classes em Java – Modificadores de Acesso • Exemplo de Proteção aos Métodos (ações) • Outro exemplo, seria um método imprimeNúmeroDaPágina de uma classe Relatório. • Esta classe teria o método imprimeRelatório que sempre que necessário se utilizaria do método imprimeNúmeroDaPágina. • Seria inadequado a execução de imprimeNúmeroDaPágina desatrelado do método imprimeRelatório. • No primeiro exemplo apresentado, seria conveniente usar um modificador para proteger os dados, assim garantindo que as datas sempre seriam validados. • No segundo exemplo, seria conveniente usar um modificador para restringir o acesso ao método imprimeNúmeroDaPágina, já que este só deve ser usado através do método imprimeRelatório.

  34. Classes em Java – Modificadores de Acesso • Existem quatro modificadores de acesso: • public: garante que o campo ou método da classe declarado com este modificador poderá ser acessados ou executado a partir de qualquer outra classe. • private: só podem ser acessados, modificados ou executados por métodos da mesma classe, sendo ocultos para o programador usuário que for usar instâncias desta classe ou criar classes herdeiras ou derivadas. • protected: funciona como o modificador private, exceto que classes herdeiras ou derivadas também terão acesso ao campo ou método. • Finalmente, campos e métodos podem ser declarados sem modificadores. Nesse caso, eles serão considerados como pertencentes à categoria package, significando que seus campos e métodos serão visíveis para todas as classes de um mesmo pacote.

  35. Classes em Java – Modificadores de Acesso • Ao criar uma classe, o programador deve implementar uma política de ocultação ou de acesso a dados e a métodos internos. • Regras básicas para implementação de políticas para classes simples: • Todo campo deve ser declarado como private ou protected. • Métodos que devem ser acessíveis devem ser declarados com o modificador public. Caso classes não venham a ser agrupadas em pacotes, a omissão não gera problemas. • Métodos para controle dos campos devem ser escritos, e estes métodos devem ter o modificador public. • Se for desejável, métodos podem ser declarados como private.

  36. Exemplo de Escopo e Modificadores public determina que essa classe pode ser instanciada dentro de qualquer outra classe. public class Data { private byte dia, mes; private short ano; public void inicializaData(byte d,byte m,short a) { if (dataEValida(d,m,a) == true) { dia = d; mes=m; ano=a; } else { dia = 0; mes=0; ano=0; } } private determina que os dados só podem ser manipulados dentro da própria classe. Como “dia”, “mês” e “ano” são declarados fora dos métodos, são variáveis globais (atributos). public indica que o método pode ser acessado sem restrições As variáveis “d”, “m” e “a” são parâmetros (argumentos) e só podem ser manipulados dentro desse método.

  37. Exemplo de Escopo e Modificadores private boolean dataEValida(byte d,byte m,short a) { boolean validade = false; if ((d>=1) && (d<=31) && (m>=1) && (m<=12)) validade = true; return validade; } protected void mostraData() { System.out.println(dia + “/” + mês + “/” + ano); } } private indica que esse método só pode ser acessado através de outros métodos da própria classe. A variáveis “validade” é uma variável local e só podem ser manipulada dentro desse método. protected indica que esse método só pode ser acessado através de métodos dessa classe ou de classes herdeiras ou derivadas.

  38. Programas baseados em Orientação a Objetos • Programas orientados a objetos, são compostos por: • conjuntos de objetos que representam os objetos existentes no negócio modelado. • conjuntos de objetos que representam estruturas adequadas para a manipulação de dados. • Os objetos que compõem o programa comunicam-se por trocas de mensagens. • O programa precisa ter um ponto de entrada que indique à máquina virtual onde iniciar a execução. public class Aplicacao { public static void main(String[] s) { } }

  39. Aplicações em Java public static void main(String[] args) • public: é visível para qualquer outra classe. • static: dispensa a criação de objetos. • void: nenhum retorno esperado. • main: convenção para indicar a máquina virtual qual o ponto de entrada da aplicação. • String[] args: parâmetros passados pela aplicação via linha de comando. args é o identificador.

  40. Exemplo de uma Aplicação public class Aplicacao { private Ponto p1,p2; public void moverPontos() { p1.mover(4F,2F); p2.mover(-2F,-4F); } public void criarPontos() { p1 = new Ponto(); p2 = new Ponto(); } public void rodar() { criarPontos(); moverPontos(); } public static void main(String[] s) { Aplicacao ap = new Aplicacao(); ap.rodar(); } } Declaração de objetos da classe Ponto como atributos. Utilização do método mover da classe Ponto, através do objeto p1. Instância de um objeto da classe Ponto Método principal, que será executado inicialmente pela máquina virtual Java. Criação de um objeto da própria classe

  41. Exemplo de uma Aplicação public class Ponto { private float x; private float y; public void mover(float novoX, float novoY) { x = novoX; y = novoY; } } Declaração de variáveis do tipo primitivo float como atributos.

  42. Operador new • new instancia um novo objeto. • new aloca o espaço necessário para armazenar o estado do objeto e uma tabela para indicar o corpo do código necessário para efetuar suas operações. • new executa as tarefas de inicialização do objeto conforme o seu Construtor. • new ‘retorna’ o identificador do objeto criado e o operador de atribuição é utilizado para copiar este endereço para uma variável, que servirá para futuras referências ao objeto. • O compilador e a máquina virtual Java verificam o tipo da variável e o tipo da referência retornada.

  43. Garbage Collection • Gerenciador de memória para aplicações java. • Thread chamada Automatic Garbage Collector. • Retorna a memória ocupada por objetos que não estão mais sendo usados. • Monitora a criação de objetos através do new. • Cria um contador de referência para cada objeto. • Libera a memória quando o contador chegar a zero.

  44. Referência nula • Objetos armazenam uma referência nula até serem inicializados. • A referência nula é representada pela palavra reservada null. • Pode-se desfazer uma referência para um objeto atribuindo a ela a palavra null.

  45. Primitivas e Referências • Variáveis de tipos primitivos armazenam um valor • Na declaração aloca-se espaço na memória suficiente para o armazenamento da variável. • Variáveis de tipos referências armazenam identificadores para objetos • Na declaração aloca-se espaço para a referência ao objeto. • A alocação do objeto é realizada através do operador new.

  46. Construtores • Já vimos que podemos criar aplicações que utilizam instâncias de classes definidas pelo usuário ou já existentes. • Após criar a instância da classe com a palavra-chave new, usamos métodos para inicializar os campos da instância.Na declaração aloca-se espaço para a referência ao objeto. • Por esquecimento, um programador pode criar a instância de uma classe mas não inicializar seus dados.

  47. Construtores • Construtor é um tipo especial de membro de classe chamado automaticamente quando instâncias são criadas através da palavra chave new. • Construtores são úteis para: • inicializar os atributos de uma classe; • realizar rotinas complexas de inicialização; • realizar inicializações segundo parâmetros passados no momento da criação do objeto.

  48. Construtores • Na declaração de um construtor deve-se considerar que: • Construtores devem ter exatamente o mesmo nome da classe; • Construtores não possuem tipo de retorno, nem mesmo void; • Construtores são, normalmente, públicos. • Programador não pode chamar construtores diretamente;

  49. Construtores • Toda classe possui um construtor. • Caso o programador não forneça uma versão explícita do construtor, Java utiliza uma versão de construtor implícita que não recebe nenhum parâmetro. • Se o programador fornecer um construtor a uma classe, a linguagem não mais incluirá o construtor padrão implícito.

  50. Construtores - Exemplo public class Empregado { String Nome, Endereço, CPF; float Salário; int Idade; public Empregado ( String N, String End, String cpf, int Ida) { Nome = N; Endereço = End; CPF = cpf; Idade = Ida; } public String InformarCPF( ) { return CPF; } public String ApresentarNome( ) { return Nome; } } Construtor da classe Empregado. Observe que não foi definido um tipo de retorno e possui o mesmo nome da classe.

More Related