Introdução à Orientação a Objetos Professor: Ricardo Luis dos Santos IFSUL 2016
Agenda Introdução Orientação a Objetos Conceitos Classes Objetos Resumo Boas Práticas Hands on 2
Introdução Existem diversos paradigmas (filosofia) adotados na construção de software Imperativo ou Procedural (C, Fortran, etc...) Lógico (Prolog, etc...) Funcional (Lisp, OCAML, etc...) Orientado a Objetos (Java, C++, SmallTalk, etc... ) Orientado a Aspectos (AspectJ, AspectC++, etc...) 3
Introdução Programação Estruturada Composição dos Programas Um programa é composto por um conjunto de rotinas (funções) A funcionalidade do programa é separado em funções Os dados do programa são variáveis locais ou globais Fluxo de Execução O programa tem início em uma rotina principal (main) A rotina principal chama outros métodos Estas funções podem chamar outras funções, sucessivamente Ao fim de uma função, o programa retorna para a função que a chamou 4
Introdução Programação Orientada a Objetos Composição dos Programas A funcionalidade do programa é agrupada em objetos Os dados do programa são agrupados em objetos Os objetos agrupam dados e métodos correlacionados Fluxo de Execução Similar a programação estruturada Os objetos colaboram entre si para a solução dos objetivos A colaboração se realiza através de chamadas de rotinas 5
Introdução A OO tenta aproximar o mundo virtual do mundo real Modelando aspectos existentes no mundo real para colocálos em forma de bits e bytes permitindo o processamento simulado em computadores Mas primeiro, precisamos compreender melhor o mundo a nossa volta Audição Visão Paladar Tato Olfato 6
Introdução Descrevam isto 7
Introdução Programação Orientada a Objetos Surgiu na tentativa de solucionar problemas complexos existentes através do desenvolvimento de softwares menos complexos, confiáveis e com baixo custo de desenvolvimento e manutenção Sugere a redução da distância entre a modelagem computacional e o mundo real 8
Introdução Programação Orientada a Objetos Permite que objetos do mundo real sejam mapeados em objetos no computador, pressupondo que o mundo é composto por objetos Os sistemas são modelados como um conjunto de objetos que interagem entre si 9
Introdução Programação Orientada a Objetos, por que usar? Permite alta reutilização de código Reduz tempo de manutenção de código Reduz complexidade através da melhoria do grau de abstração do sistema Aumenta qualidade e produtividade oferece maiores facilidades ao desenvolvedor Adoção (aceitação) comercial crescente 10
Introdução Programação Orientada a Objetos, por que usar? Velocidade na prototipagem de sistemas Reutilização de códigos Modularidade no desenvolvimento Abstração do mundo real 11
Introdução Programação Orientada a Objetos, problemas? Pensar no paradigma OO simplesmente como uma linguagem Aversão a reutilização Pensar na OO como uma solução para tudo Programação Egoísta: É preciso documentar! 12
Introdução Estruturada Sequencia Decisão Repetição OO Encapsulamento Herança Polimorfismo 13
Como começar? Nós (seres humanos) interagimos com o mundo através de objetos Estamos sempre identificando objetos ao nosso redor Atribuímos nomes Classificamos em grupos (classes) Vamos tentar agrupar alguns objetos? 14
Orientação a Objetos Definição de Classe Classe é a implementação de tipo abstrato de dados (TAD) no paradigma orientado a objetos Uma classe é um molde para a criação de objetos. A classe define as propriedades (atributos) e os comportamentos (métodos) Uma classe define como produzir (instanciar) objetos a partir dela Exemplos Carro, Felinos, Alunos, Professores 15
Orientação a Objetos Definição de Objeto Um objeto é a representação computacional de um elemento ou processo do mundo real Cada objeto possui um conjunto de características e comportamentos Um objeto é a instância de uma classe CLASSE P P3 P2 P1 16
Orientação a Objetos Definição de Objeto Um objeto é uma construção de software que encapsula estado e comportamento, através respectivamente de propriedades (atributos) e operações (métodos) Objetos interagem entre si através de mensagens Exemplos Carros: Fusca, Gol, Sonic, Ka, Stillo Felinos: Gato, Tigre, Leão Alunos: João, Maria, Carlos, Carolina Professores: Girafales, Remor, Ricardo 17
Orientação a Objetos Definição de Objeto Estado de um Objeto Composto por suas propriedades e seus respectivos valores Comportamento Maneira como o objeto reage quando o seu estado é alterado ou quando uma mensagem é recebida Características São as propriedades que definem um objeto (cor, idade, altura, modelo, marca...) 18
Orientação a Objetos Definição de Objeto Uma característica descreve uma propriedade de um objeto (atributo), ou seja, algum elemento que descreva o objeto Exemplo de características de um objeto identificado como carro Cor Marca Número de portas Ano de fabricação Consumo Tipo de combustível 19
Orientação a Objetos Definição de Objetos Um comportamento representa uma ação ou reposta (método) de um objeto a uma ação do mundo real Exemplo de comportamentos de um objeto identificado como carro Acelerar Parar Estacionar Lecionar Estudar Almoçar... 20
Orientação a Objetos Outros Exemplos Cachorro Características: nome, cor, raça Comportamentos: latir, correr Bicicleta Características: marcha, quantidade de marchas, velocidade Comportamentos: trocar marcha, aplicar freios 21
Orientação a Objetos Mundo Real Características Comportamentos Mundo Virtual Atributos Métodos 22
Orientação a Objetos Identificar as características e o comportamento de objetos do mundo real é o primeiro passo da Programação Orientada a Objetos Para tanto, devemos nos perguntar Quais as possíveis características relevantes deste objeto e quais estados elas assumem? Quais comportamentos (ações) que ele deve executar? 23
Orientação a Objetos Abstrair é a resposta (42)! Objetos não são considerados isoladamente Um processo natural é identificar características e comportamentos semelhantes entre os objetos Objetos com características e comportamentos semelhantes são agrupados em classes 24
Orientação a Objetos Carro marca modelo ano placa chassi cor corlateral velocidade consumo tipocombustivel movimentar parar acelerar estacionar getvelocidade Atributos Métodos 25
Orientação a Objetos Carro marca modelo ano placa chassi cor corlateral velocidade consumo tipocombustivel movimentar parar acelerar estacionar getvelocidade Atributos Métodos 26
Orientação a Objetos 27
Orientação a Objetos Objetos colaboram através da troca de mensagens A troca de mensagens representa a chamada de um método Freiar 28
Orientação a Objetos Um envio de mensagem sempre possui Seletor de mensagens (método) Parâmetros (opcionais) Freiar Retorno de valor (opcional) Emissor Receptor 29
Resumindo Objeto Método Classe É uma instância que possui dados (características) e métodos (operações ou ações) É uma sub-rotina interna no objeto que informa como executar uma ação É um recipiente para construir objetos. Ela sabe as variáveis que estão no objeto e detém os métodos para cada objeto Mensagem Perguntar a um objeto alguma coisa é chamado de: envio de mensagem. Isto é similar a solicitar uma rotina 30
Resumindo A classe provê a estrutura para a construção de objetos Um objeto é uma instância de uma classe Um objeto possui características, comportamentos e um estado (valores de seus atributos) O comportamento de um objeto é exposto através de métodos 31
BOAS PRÁTICAS 32
Boas práticas Nome de classes Acentos e cedilha são desaconselhados O compilador usa o nome das classes pra nomear arquivos Números podem aparecer após uma letra $ e _ são considerados letras Maiúsculas <> minúsculas Há palavras reservadas 33
Boas práticas Nome de classes Iniciar nomes de classes com maiúsculas Usar maiúsculas para separar palavras CadastroDeFuncionario Uma classe por arquivo Usar o mesmo nome para o arquivo (com extensão.java) e para a classe 34
Boas práticas 35
Boas práticas Nomes de atributos de classes Acentos e cedilha podem ser usados sem restrição Números podem aparecer após letra _ e $ são considerados letra Maiúsculas <> minúsculas Há palavras reservadas É possível declarar vários campos com o mesmo tipo (ou classe) separando seus nomes por vírgulas 36
Boas práticas Nomes de atributos de classes Iniciar nomes de campos de classes com minúsculas Usar maiúsculas para separar palavras anofabricacao anomodelo numerodias velocidade 37
Boas práticas Nomes de métodos Mesmas regras que nomes de campos Iniciar nomes de métodos com minúsculas Usar maiúsculas para separar palavras mostrarcampos acende inicializa transferirdinheiro 38
HANDS ON 39
Hands On Rápida explicação Um objeto é uma instância de uma única classe Uma instância de um objeto é uma unidade de programação que é armazenada em uma variável Um programa orientado a objetos é composto por um conjunto de objetos que interagem entre si para a solução de um problema 40
Hands On Carro id: int marca: String modelo: String ano: int placa: String chassi: String cor: String corlateral: String velocidade: double consumo: double tipocombustivel: String Carro() movimentar(): void parar(): void acelerar(velocidade: double): void estacionar(): void getvelocidade(): double Atributos Métodos 41
Hands On 42
Hands On Construtor Completo 43
Hands on Criar vários carros diferentes Exibir todos os atributos de todos os objetos Colocar os carros em arrays? Sobrescrever o método tostring() do Object 44
Hands on Criar uma classe Jogador conforme Cadastrar pelo menos um time completo (11 jogadores) Um jogador está suspenso pelo 3 cartão amarelo ou quando recebe uma punição (vermelho ou tribunal) Jogador id: int nome: String apelido: String datanascimento: Date numero: int posicao: String qualidade: int cartoes: int suspenso: Boolean Jogador() Jogador(all attrs) verificarcondicaodejogo(): Boolean Ao final, imprimir a lista com todos os jogadores, informando quem está apto para jogar 45
Hands on Criar dois novos métodos na classe Jogador 46 aplicarcartao(int quantidade): void - Aplica a quantidade de cartões informada ao jogador cumprirsuspencao(): void Esse método vai zerar a quantidade de cartões e tornar o jogador apto a jogar Criar uma nova Classe Time Criar um método para relacionar 18 jogadores observando apenas a qualidade de cada jogador e a suspensão No método main exibir esta escalação DESAFIO Considerar a posição no momento da escalação Time nome: String apelido: String fundacao: Date plantel: ArrayList<Jogador> relacionados: ArrayList<Jogador> Time() Time(all attrs) relacionarjogadores(): ArrayList<Jogador>
Hands on Um desenvolvedor precisa modelar uma classe para mapear os funcionários de uma empresa 47 Entre os atributos que o sistema precisa manipular estão Nome, sobrenome, data de nascimento, matricula, o salário do funcionário, endereço, e-mail e o cpf Entre os métodos que o sistema precisa manipular estão Receber aumento de salario, calcular o rendimento anual total do funcionário, calcular o imposto pago mensalmente pelo funcionário, calcular o total anual de imposto pago pelo funcionário. Adicionar também pelo menos 3 construtores CRIE o diagrama que representa esta classe CRIE a classe com a devida assinatura dos métodos (não é necessário implementá-los)
Hands on Criar uma classe de Funcionário com os atributos 48 Crie alguns métodos de acordo com sua necessidade receberaumento(int valor): void - que aumenta o salario do funcionário de acordo com o parâmetro informado calcularganhoanual(): Double - não recebe parâmetro algum, devolvendo o valor do salário anual Se necessário calcule o imposto (% em variáveis no construtor) O funcionário paga 11% de INSS Se o salário é maior que R$ 2.500,00 é cobrado 17,5% de IR do excedente calcularimposto(): Double - não recebe nenhum parâmetro e devolve o imposto pago no decorrer de um ano
Hands On 1 Vamos definir classes necessárias para criar um banco simples Quais classes, atributos e métodos devem ser criados? Cadastros? Endereços? Sacar? Neste momento não é necessário implementar as chamadas de objetos para executar as ações Fazer um diagrama de classes no quadro 49
Criar uma conta Especial que tem limite e que cobra juros para o valor usado Criar uma conta Poupança e calcular os rendimentos para esta conta 50
Hands On 2 Criar um jogo da velha para 2 jogadores Averiguar se um jogador ganhou a cada movimento Exibir no console passo a passo como está o tabuleiro DESAFIO 1 Fazer o computador assumir o lugar de um jogador (tentar ganhar) 51
Hands On 3 (Desafio) Criar um jogo da velha para até 3 jogadores Criar um outro jogo da velha tridimensional (novas classes) Ganha quem fizer o maior número de linhas DESAFIO 1 Fazer um algoritmo para jogar contra um humano o jogo da velha 3D 52