Baixe o app para aproveitar ainda mais
Prévia do material em texto
Paradigmas de Linguagens Computacionais Henrique Rebêlo Centro de Informática Universidade Federal de Pernambuco @ Henrique Rebêlo, 2016. Some rights reserved. Except where otherwise indicated, this work is licensed under https://creativecommons.org/licenses/by-nc-sa/3.0/deed.pt/ Conceitos básicos de orientação a objetos Programação procedural Baseado em funções/proc. • unidade de programação • função/procedimento • grupamento de funções/procedimentos para formar um programa… Qual o tamanho de um array? 23 12 25 32 33 53 21 2 … 89 function doSomething() { $array = array(23,12,25,32,33,53,21,2,...,89); for ($i = 0; $i < count($array); $i++) { ... } } O array NÃO sabe! Usando essa idéia para outros objetos no mundo… What? You don’t know your age? You also don’t know if you are romantic? O array “pode” saber seu próprio tamanho 23 12 25 32 33 53 21 2 … 89 count (array); Array.size(); O que é um objeto? | 2004 JavaOneSM Conference | Session BUS-31929 1964 1974 20041984 1994 In 1969 most programmers would have used this has poor design and code modularity! 22 12 65 93 43 29 86 65 2 4 collection of procedures to operate on and manage table entries 6 7 5 8 + objects are not intuitive objects are intuitive | @ copyright Kiczales, 2004 JavaOneSM Conference | Session BUS-3192 | 2004 JavaOneSM Conference | Session BUS-319210 1964 1974 20041984 1994 OOP invented in 1961 – about same time as structured programming – term “object-oriented programming” in 1967 – to make simulation code look like the model OOP intuitivenot intuitive | @ copyright Kiczales, 2004 JavaOneSM Conference | Session BUS-3192 Coleção de objetos interativos Object 1 Object 5 Object 2 Object 3 Object 4 O que podemos modelar com objetos ? • agrupamento de dados e operações que representam um • Conta bancária • número e saldo • creditar e debitar • Aluno da UFPE (cadastrado no Siga@) • nome, cpf, endereço… • corrigir nome, atualizar endereço • Produto (de supermercado) • código, descrição, valor … • atualizar estoque, remarcar preço … Um objeto é um… conceito Objeto DVD As operações que o DVD pode executar Fonte: http://www.amazon.com O estado atual do DVD; o que ele está fazendo... Objeto conta bancária NúmeroSaldo 21.342-7875,32 creditar debitar As operações que uma conta pode executarO estado atual da conta Estados do objeto conta NúmerogetSaldo 21.342-7875,32 Crédito Débito NúmeroSaldo 21.342-7875,32 creditar debitar NúmerogetSaldo 21.342-7875,32 Crédito Débito NúmeroSaldo 21.342-7895,32 creditar debitar creditar(20) Criando um objeto snack Snack object… • … using a box Um objeto consiste de… • Métodos: as operações que o objeto pode executar • Atributos: informações sobre o objeto, suas propriedades, seu estado atual O estado é encapsulado, só pode ser modificado pelos métodos do próprio objeto Classe vs objeto Precisamos de um Template! Organizando nosso snack com um template! Uma classe é um… Conjunto de objetos do mesmo tipo, com as mesmas características (métodos e atributos) Uma classe define um tipo: o tipo cujos elementos são objetos com os mesmos métodos e atributos Definindo classes em Java O corpo de uma classe pode conter: • atributos • métodos • construtores (inicializadores) • outras classes... public class Conta { /* corpo da classe */ } Definindo atributos em Java Cada atributo tem um tipo específico, que caracteriza as propriedades dos Objetos da classe public class Conta { private String numero; private double saldo; … } • Referências • classes • Object • String • Livro • Conta • Produto • … • interfaces • arrays Tipos em Java • Primitivos • byte • short • int • long • float • double • boolean • char Os elementos de um tipo primitivo são valores, enquanto os elementos de um tipo referência são (referências para) objetos! • Não é um tipo primitivo e sim uma classe • Literais: "" "a" "CIn\nUFPE“ • Operadores: + (concatenação) "maio " + "de " + 99 + "= maio de 99" • Note a conversão de inteiro para string • Há uma conversão implícita para todos os tipos primitivos String • Comparação (igualdade) de dois Strings • Tamanho de um string a Mais operados sobre String String a … String b … if (a.equals(b)){ } … int i = a.length(); Usando String String s1 = "ricardo"; String s2 = "Ricardo"; if(s1.equals(s2)){ System.out.println("igual"); } else{ System.out.println("diferente"); } if(s1.equalsIgnoreCase(s2)){ System.out.println("igual"); } else{ System.out.println("diferente"); } • Extrair uma substring de uma string maior Operador substring String saudacao = "Bem-vindo"; String s = saudacao.substring(0,3); // s = "Bem“; // caracteres das posicoes 0, 1 e 2 Encapsulamento public class Livro { private int anoDePulibcacao; private String titulo; … } Não use preposições! A palavra reservada private indica que os atributos só podem ser acessados (isto é, lidos ou modificados) pelas operações da classe onde foram definidos Expondo o necessário! Private Properties Public Capacity Public Capacity Public Capacity Public Capacity Public Capacity Public Capacity Public Capacity Public Capacity From http://www.cs.brown.edu/courses/cs015/lectures.html • Java não obriga o uso de private, mas a boa prática de programação orientada a objetos considera isso uma pré- condição para a programação orientada a objetos • Usem private! Encapsulamento e Java • Não importa como os métodos são implementados • como o creditar funciona? • como o debitar funciona? • Portanto, escondemos a estratégia usada na implementação • focus no “o que” • esqueça sobre “como” Abstração HowWhat Definindo métodos em Java NúmerogetSaldo 21.342-7875,32 Crédito Débito NúmeroSaldo 21.342-7875,32 creditar debitar NúmerogetSaldo 21.342-7875,32 Crédito Débito NúmeroSaldo 21.342-7895,32 creditar debitar creditar(20) • Como definir o método creditar? Método creditar em Java public class Conta { private String numero; private double saldo; public void creditar(double valor){ this.saldo += valor; } … } Um método é uma operação que realiza ações e modifica os valores dos atributos do objeto responsável pela sua execução Método vs encapsulamento public class Conta { … public void debitar(double valor){ this.saldo -= valor; } … } Por que o método debitar não tem como parâmetro o número da conta ? tipo de retorno parâmetros do método corpo do método • Os objetos se comunicam para realizar tarefas • A comunicação é feita através da troca de mensagens ou chamada de métodos • Cada mensagem é uma requisição para que um objeto execute uma operação específica Comunicação entre objetos variável contendo referência para o objeto Conta c = … c.creditar(45.30); nome do método a ser executado • Desenvolvimento de uma solução é mais fácil quando quebramos esta solução em módulos gerenciáveis • Desenvolver módulos separados, onde cada um é responsável por uma certa parte da solução • programação modular • OO facilita a programação modular • módulos são as classes e objetos Utilizando OO para desenvolver programas • Orientação a objetos Modularidade • reusabilidade • extensibilidade • Linguagens OO têm em objetos, classes,..., elementos fundamentais para construir programas• linguagens OO possuem construções específicas que permitem mapeamento dos conceitos OO Considerações sobre OO Os conceitos de orientação a objetos são independentes da linguagem de programação Paradigmas de Linguagens Computacionais Henrique Rebêlo Centro de Informática Universidade Federal de Pernambuco @ Henrique Rebêlo, 2016. Some rights reserved. Except where otherwise indicated, this work is licensed under https://creativecommons.org/licenses/by-nc-sa/3.0/deed.pt/
Compartilhar