Baixe o app para aproveitar ainda mais
Prévia do material em texto
PUC Minas – Curso de Sistemas de Informação Programação Orientada por Objetos Profs. João Caram e Paulo Amaral Classes e objetos com revisão de ATP Programação Orientada por Objetos Baseado no material dos seguintes professores: - João Caram - Hugo Bastos - Anna Tostes 2 Endereços de Memória • Instruções e dados são armazenados na memória principal (RAM) durante o processamento. • Cada posição de memória do computador possui um endereço numérico associado. célula = 8 bits e n d e r e ç o s 0 2 -1 16 2 1 instrução ou dado Endereços e variáveis • Para facilitar a tarefa de desenvolvimento de programas, as linguagens de programação permitem que posições da memória principal sejam referenciados por nomes simbólicos ao invés de dos endereços numéricos correspondentes. • Estes nomes simbólicos são denominados de variáveis porque seus conteúdos podem variar durante a execução do programa. Variáveis int numeroDaConta; numeroDaConta = 4823 numeroDaConta Tipos de dados • Cada variável está associado a um tipo de dados, o qual define como o dado é codificado, valores válidos e a quantidade de posições de memória necessárias para representar os dados que a variável armazena. • As linguagens de programação incluem alguns tipos de dados básicos, conhecidos como tipos primitivos ou fundamentais por serem suportados diretamente pelo compilador, sendo utilizados para a definição de variáveis, parâmetros, declarações, etc. Tipos de dados • Os tipos de dados primitivos ou simples são grupos de valores indivisíveis como int, double, bool, char, etc. • Na linguagem de programação C#, as variáveis devem ser declaradas antes de serem utilizadas. A declaração de uma variável envolve definir um nome único (identificador) dentro de um escopo. • Em C# todo o tipo de dados possui um correspondente na CLR (Common Language Runtime), por exemplo: int em C# refere-se a System.Int32 na plataforma .NET. Tipos de dados em C# Os tipos de dados no C# são divididos em 3 categorias: • Tipos valor(value types) • Tipos referência (reference types) • Tipos ponteiro (pointer types) Tipos valor armazenam dados em memória. Tipos referência armazenam uma referência, ou o endereço, para o valor atual. Tipos ponteiro apenas apontam para um endereço de memória. Tipos primitivos em C# Tipo C# Descrição Faixa de valores bool Booleano true ou false byte Inteiro de 8-bit com sinal -127 a 128 char Caracter Unicode 16-bit U+0000 a U+ffff decimal Inteiro de 96-bit com sinal 1,0 × 10E-28 a 7,9 × 1028(28-29 dígitos) Double Flutuante IEEE 64-bit ±5,0 × 10E-324 a ±1,7 × 10E308 (15-16 dígitos significativos) float Flutuante IEEE 32-bit ±1,5 × 10E-45 a ±3,4 × 10E38 (7 dígitos significativos) int Inteiro de 32-bit com sinal -2.147.483.648 a 2.147.483.647 long Inteiro de 64-bit com sinal –9,223,372,036,854,775,808 a 9,223,372,036,854,775,807 Sbyte Inteiro de 8-bit sem sinal 0 a 255 Short Inteiro de 16-bit com sinal -32,768 a 32,767 String String de caracteres Uint Inteiro de 32-bit sem sinal 0 a 4,294,967,295 Ulong Inteiro de 64-bit sem sinal 0 a 18,446,744,073,709,551,615 Ushort 16-bit sem sinal 0 a 65,535 Tipos primitivos em Java Tipo Tamanho Precisão byte 8 bits -128 a 127 short 16 bits -32.768 a 32.768 int 32 bits -2.147.483.648 a 2.147.483.647 long 64 bits -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807 float 32 bits IEEE 754 (-1,4 10 x E-45 a 3,4 x10E+38) double 64 bits IEEE 754 (-4,9 10 x E-324 a 1,797x10+308) char 16 bits UNICODE boolean true, false Arrays • Array é uma coleção de elementos armazenados em sequência, acessíveis através de um índice numérico. Pode-se criar arrays com uma ou mais dimensões. • Em C# e Java, o primeiro elemento de um array é o de índice zero (0). • Exemplos: int [ ] numeros = new int [100]; // C# e Java int [ ] numeros = {1, 2, 3, 4, 5}; // C# e Java int [,] numeros = new int [3, 2] {{1, 2}, {3, 4}, {5, 6} }; // C# int [ ][ ] numeros = new int [ ][ ] {{1, 2}, {3, 4}, {5, 6} }; // Java string [,] nomes = new string [2, 2] {{“Mara”, “Lotar”}, {“Mary”, “José”} }; // C# Tipo Abstrato de Dados TAD: Tipos Abstratos de Dados • “Coleção bem definida de dados a serem armazenados e um grupo de operadores que podem ser aplicados para manipulação desses dados.” (FERRARI, R.). • TAD pode ser visto como um modelo matemático, acompanhado de operações definidas sobre o modelo. • É um conjunto de funções operando sobre uma estrutura de dados, sendo que a organização física da estrutura é encapsulada. • É um conjunto de dados munido de operações sobre estes dados. • Não é visível para o programador que usa o tipo abstrato. Exemplo: TAD Conta Bancária Operadores, funções ou métodos: • CriarConta • Depositar • Sacar • MostrarSaldo Tipos de dados usados como parâmetros das funções: • numConta: número da Conta Bancária • nomeTitular: nome do titular da conta • SaldoConta TAD: melhorar a qualidade do código • Ocultamento de informações: é importante que o cliente conheça o menor número possível de informações a respeito do TAD. • Interface simples e bem definida: o TAD deve ser definido de forma que seja fácil utilizar as suas funcionalidades (alterar o algoritmo sem alterar a assinatura). Tipo Abstrato de Dados • TAD deve implementar exatamente um conceito bem delimitado e definido. • Ser abstrato significa: • Ser manipulável através de um conjunto limitado de funções • Detalhes internos (organização de dados) não são visíveis para os usuários de tais tipos (encapsulamento). structs Um tipo struct (estrutura): é um tipo de valor normalmente usado para encapsular pequenos grupos de variáveis relacionadas, como as coordenadas de um retângulo ou as características de um item em um inventário. Structs compartilham grande parte da sintaxe de classes, embora sejam mais limitados do que classes: O exemplo a seguir mostra uma declaração simples de estrutura: public struct Book{ public decimal price; public string title; public string author; } structs x classes structs são tipos de valor e classes são tipos de referência. Diferentemente das classes, structs pode ser instanciada sem usar o operador new. Uma estrutura não pode herdar uma outra estrutura ou classe, e também não pode ser base de uma classe. O tipo struct pode adequado para a representação de objetos simples tais como Point, Rectangle e Color porque pode ser mais eficiente em alguns cenários. Por exemplo, ao declarar um array de 1000 objetos Point, aloca- se memória adicional para referenciar cada objeto; neste caso, uma struct seria menos dispendiosa. Exemplo TAD: Lista (AED) • Considere uma aplicação que utiliza uma lista de inteiros: • Definição da TAD: Lista • Operações da TAD Lista: • Criar a lista vazia; • Obter o primeiro elemento da lista; • Inserir um elemento na lista. • A lista pode ser implementada utilizando uma estrutura de dados como um vetor. • Cada operação (método) do TAD Lista pode ser implementada através de procedimentos ou funções. • Se existir a necessidade de alteração do TAD, esta é realizada na parte encapsulada, sem afetar outras partes do código. Exemplo TAD: Pilha • Seja um TAD para representar uma pilha de dados, denominado Pilha. • Operações possíveis sobre este tipo • vazia, que retorna verdadeiro caso a pilha esteja vazia • empilha(elemento), que coloca o elemento especificado no topo da pilha • desempilha, que remove o elemento do topo da pilha Exemplo: Pilha • Como é um TAD, a representação real e implementação do tipo Pilha estão ocultas esomente as operações estão visíveis para serem acessadas por usuários do tipo • Vantagem: • Momento 1: Inicialmente utiliza um array • Momento 2: Passa a usar uma lista encadeada • A modificação não causa qualquer impacto nos códigos que utilizam o tipo Pilha, pois a representação interna está encapsulada PUC Minas – Curso de Sistemas de Informação Programação Orientada por Objetos Profs. João Caram e Paulo Amaral POO Programação orientada a objetos (POO): Paradigma de programação que busca: Agrupar dados e procedimentos. Aproximar o modelo do programa ao mundo real: interação entre objetos Fortemente baseada nos conceitos de Classes e Objetos. PUC Minas – Curso de Sistemas de Informação Programação Orientada por Objetos Profs. João Caram e Paulo Amaral Principios POO Modularidade Reuso Encapsulamento Abstração • O princípio fundamental da Orientação a Objetos que permite a construção de sistemas modulares é o mecanismo de abstração. • Uma abstração é um mecanismo que permite uma situação complexa do mundo real ser representada por um modelo mais simples. • “Visualização ou representação de uma entidade que inclui somente os atributos de importância em um contexto particular” (Sebesta, 2000). • Processo de representar um grupo de entidades através de seus atributos comuns. Encapsulamento • Agrupamento de subprogramas e dados compilados separadamente e independentemente. • Ex: bibliotecas DLL's do Windows • Podem ser disponibilizados como “pedaços de softwares” para a produção de programas maiores. Encapsulamento • Tarefa de tornar um objeto o mais auto-suficiente possível. • Exemplos: • Para se dirigir um carro não é necessário entender o funcionamento do motor. • Para usar o computador, não é necessário saber como acontece a comunicação entre o sistema operacional e o hardware da máquina para diversas funções. Abstração x Encapsulamento • Abstração: define as entidades que representam um objeto. • Encapsulamento: esconde detalhes do objeto, ocultando detalhes de seu funcionamento. Classe: TAD em POO • Na Programação Orientada por Objetos uma Classe implementa um TAD. • Uma classe contém os elementos que representam o tipo. • Uma classe agrupa todas as operações realizadas sobre os elementos. • Objetos são “instanciados” ou criados de uma classe. • Os Objetos são entidades (ou itens) unicamente identificados e representam uma instância concreta e dinâmica de uma classe. Classes Classe: descrição de um TAD Constituída por atributos (características) e métodos (comportamento) Atributos de classe são semelhantes a campos de estruturas; Métodos de classe são funções que operam sobre os atributos. Classes Exemplo: classe Data Atributos possíveis: dia, mês, ano Métodos possíveis: Adicionar dias a uma data Diferença de dias entre duas datas Verificar validade da data Semana da data no ano (1 a 52) Dia da data no ano (1 a 366) ... Classes Uma “variável” declarada cujo “tipo” é uma classe, esta variável será composta, assim como nas estruturas (structs). Haverá uma cópia de cada um dos atributos para cada “variável” declarada daquela classe. Objetos Um objeto é uma instância de uma classe Representação na memória Classe x Objeto Uma classe é um modelo para algo que deve ser criado. Uma “Receita para Bolo de Chocolate” será usada como um modelo para o bolo que será criado. De forma análoga: A receita é uma classe. O bolo é um objeto. Classe x Objeto Uma classe não é utilizada diretamente. A classe é utilizada somente para criar objetos baseados nela Objetos serão utilizados no programa. Classe x Objeto Exemplo: Classe e sua instância (objeto da classe), C#: //Classe Produto public class Produto { ... } //instância da Classe Produto Produto meuProduto = new Produto(); Classe x Objeto Classes e Encapsulamento Uma classe é geralmente dividida em duas partes: 1. Privativa: contém elementos que serão de uso exclusivo da classe. 2. Pública: contém os elementos da classe visíveis (exportados) para o usuário/programador pela classe. Regra geral: Atributos privados Métodos públicos Declaração de Classes e Objetos Declarar uma classe: Declarar um objeto: class Pessoa { string nome; void Andar() { } } Pessoa auxPessoa = new Pessoa(); PUC Minas – Curso de Sistemas de Informação Programação Orientada por Objetos Profs. João Caram e Paulo Amaral Atributos e Métodos Atributo Cor Lataria Atributo Aro Atributo Vidro Atributo Cor Parachoque Atributo Placa Atributos Métodos Ações do carro (Métodos) Ligar (Ignição) Acelerar Freiar (Brecar) Trocar de Marcha C la sse +Trocar marcha() +Ligar() +Acelerar() +Brecar() -Placa -Cor Lataria -Cor Parachoque -Aro -Tipo Vidro Fusca Carro Atributos Atributos de Objeto (ou atributos de dados) Atributos individuais: armazenados no objeto. Exemplo: A hora de um despertador. Atributos de Classe Atributo compartilhado entre todos os objetos criados → armazenado na classe. Exemplo: Um contador de despertadores existentes. Métodos Métodos: As ações ou comportamento do objeto Conjunto de serviços fornecidos pelo objeto. Manipulam e alteram os atributos do objeto. Em POO: Interações são representadas por mensagens Mensagens são enviadas a objetos. Uma mensagem pode ser gerada pelo usuário, por exemplo, ao clicar o mouse. Métodos (C#) Método:representa uma ação class Cliente { private int produtosAdquiridos; public bool EClienteEspecial() { if (produtosAdquiridos < 250) return false; return true; } public void ComprarEspecial() { /* AÇÃO */ } } ... Cliente proximoCliente = new Cliente(); bool clienteEspecial = proximoCliente.EClienteEspecial(); if (clienteEspecial) proximoCliente.ComprarEspecial(); Revisão de ATP • Procedimentos e funções • Estruturas que agrupam um conjunto de comandos • “Subprogramas” • Funções retornam um valor ao final da execução. Procedimentos, não. • Métodos • Implementam uma ação executada por um objeto de uma classe. Curso de Sistemas de Informação – PUC Minas Programação Orientada por Objetos Prof. João Caram Exercícios • Escreva uma função que receba 5 números inteiros do usuario e, ao final, retorne o maior deles. • Escreva uma função que receba 5 números inteiros do usuario e, ao final, retorne a média de seus valores. • Escreva uma função que receba 5 números inteiros do usuario e, ao final, avise se há números repetidos. Curso de Sistemas de Informação – PUC Minas Programação Orientada por Objetos Prof. João Caram Parâmetros • Tornam o uso de funções e procedimentos mais genéricos • Um código vários dados • Um parâmetro “avisa” a um procedimento ou função sobre quais dados ele deve operar • Flexibilidade e reaproveitamento de código e dados Curso de Sistemas de Informação – PUC Minas Programação Orientada por Objetos Prof. João Caram Exercícios • Escreva uma função que receba 5 números inteiros do usuário e, ao final, retorne o maior deles. • Escreva uma função que receba 5 números inteiros do usuário e, ao final, retorne a média de seus valores. • Escreva uma função que receba 5 números inteiros do usuário e, ao final, avise se há números repetidos. Curso de Sistemas de Informação – PUC Minas Programação Orientada por Objetos Prof. João Caram Parâmetros por valor (cópia) • Quando os parâmetros são passadospor valor, o valor da variável é copiado para uma variável local. A variável local é descartada após o fim do subprograma. int somar(int a, int b){ a = a+b; return a; } Curso de Sistemas de Informação – PUC Minas Programação Orientada por Objetos Prof. João Caram int a, b; a = Int.Parse(Console.Readline()); b = Int.Parse(Console.Readline()); int c = somar(a,b); Curso de Sistemas de Informação – PUC Minas Programação Orientada por Objetos Prof. João Caram int a, b; a = Int.Parse(Console.Readline()); b = Int.Parse(Console.Readline()); int c = somar(a,b); Curso de Sistemas de Informação – PUC Minas Programação Orientada por Objetos Prof. João Caram int a, b; a = Int.Parse(Console.Readline()); b = Int.Parse(Console.Readline()); int c = somar(a,b); Curso de Sistemas de Informação – PUC Minas Programação Orientada por Objetos Prof. João Caram a b int a, b; a = Int.Parse(Console.Readline()); b = Int.Parse(Console.Readline()); int c = somar(a,b); Curso de Sistemas de Informação – PUC Minas Programação Orientada por Objetos Prof. João Caram a: 8 b: 7 int a, b; a = Int.Parse(Console.Readline()); b = Int.Parse(Console.Readline()); int c = somar(a,b); Curso de Sistemas de Informação – PUC Minas Programação Orientada por Objetos Prof. João Caram a: 8 b: 7 c int a, b; a = Int.Parse(Console.Readline()); b = Int.Parse(Console.Readline()); int c = somar(a,b); Curso de Sistemas de Informação – PUC Minas Programação Orientada por Objetos Prof. João Caram a: 8 b: 7 c int a, b; a = Int.Parse(Console.Readline()); b = Int.Parse(Console.Readline()); int c = somar(a,b); Curso de Sistemas de Informação – PUC Minas Programação Orientada por Objetos Prof. João Caram a: 8 b: 7 c 8 7 int a, b; a = Int.Parse(Console.Readline()); b = Int.Parse(Console.Readline()); int c = somar(a,b); a = a+b; return a; Curso de Sistemas de Informação – PUC Minas Programação Orientada por Objetos Prof. João Caram a: 8 b: 7 c 15 7 int a, b; a = Int.Parse(Console.Readline()); b = Int.Parse(Console.Readline()); int c = somar(a,b); a = a+b; return a; Curso de Sistemas de Informação – PUC Minas Programação Orientada por Objetos Prof. João Caram a: 8 b: 7 c: 15 15 7 int a, b; a = Int.Parse(Console.Readline()); b = Int.Parse(Console.Readline()); int c = somar(a,b); a = a+b; return a; Curso de Sistemas de Informação – PUC Minas Programação Orientada por Objetos Prof. João Caram a: 8 b: 7 c: 15 Métodos (C#) Passagem de parâmetros por valor class Cliente { private int produtosAdquiridos; public void DefineProdutosAdquiridos(int quantidade) { produtosAdquiridos = quantidade; } } ... Cliente novoCliente = new Cliente(); int produtos = 255; novoCliente.DefineProdutosAdquiridos(produtos); //OR novoCliente.DefineProdutosAdquiridos(200); Parâmetros por referência • O programa cria um apontador para o local da variável original • Este apontador funciona como um atalho (ou uma “placa”) para o dado que deve ser utilizado pelo código Curso de Sistemas de Informação – PUC Minas Programação Orientada por Objetos Prof. João Caram int somar(ref int a, ref int b){ a = a+b; return a; } Curso de Sistemas de Informação – PUC Minas Programação Orientada por Objetos Prof. João Caram int a, b; a = Int.Parse(Console.Readline()); b = Int.Parse(Console.Readline()); int c = somar(ref a, ref b); Curso de Sistemas de Informação – PUC Minas Programação Orientada por Objetos Prof. João Caram int a, b; a = Int.Parse(Console.Readline()); b = Int.Parse(Console.Readline()); int c = somar(ref a,ref b); Curso de Sistemas de Informação – PUC Minas Programação Orientada por Objetos Prof. João Caram a b int a, b; a = Int.Parse(Console.Readline()); b = Int.Parse(Console.Readline()); int c = somar(ref a,ref b); Curso de Sistemas de Informação – PUC Minas Programação Orientada por Objetos Prof. João Caram a: 8 b: 7 int a, b; a = Int.Parse(Console.Readline()); b = Int.Parse(Console.Readline()); int c = somar(ref a,ref b); Curso de Sistemas de Informação – PUC Minas Programação Orientada por Objetos Prof. João Caram a: 8 b: 7 c int a, b; a = Int.Parse(Console.Readline()); b = Int.Parse(Console.Readline()); int c = somar(ref a,ref b); Curso de Sistemas de Informação – PUC Minas Programação Orientada por Objetos Prof. João Caram a: 8 b: 7 c int a, b; a = Int.Parse(Console.Readline()); b = Int.Parse(Console.Readline()); int c = somar(ref a,ref b); Curso de Sistemas de Informação – PUC Minas Programação Orientada por Objetos Prof. João Caram a: 8 b: 7 c ref a ref b int a, b; a = Int.Parse(Console.Readline()); b = Int.Parse(Console.Readline()); int c = somar(ref a,ref b); a = a+b; return a; Curso de Sistemas de Informação – PUC Minas Programação Orientada por Objetos Prof. João Caram a: 15 b: 7 c ref a ref b int a, b; a = Int.Parse(Console.Readline()); b = Int.Parse(Console.Readline()); int c = somar(ref a,ref b); a = a+b; return a; Curso de Sistemas de Informação – PUC Minas Programação Orientada por Objetos Prof. João Caram a: 15 b: 7 c: 15 ref a ref b int a, b; a = Int.Parse(Console.Readline()); b = Int.Parse(Console.Readline()); int c = somar(ref a,ref b); a = a+b; return a; Curso de Sistemas de Informação – PUC Minas Programação Orientada por Objetos Prof. João Caram a: 15 b: 7 c: 15 Métodos Passagem de parâmetros por referência (ref) public void RetornaEndereco(ref int numero, ref string rua) { numero = this.numero; rua = this.rua; } int numeroLocal = 0; string ruaLocal = “”; novoCliente.RetornaEndereco(ref numeroLocal, ref ruaLocal); // numeroLocal e ruaLocal recebem novos valores Parâmetros • Em resumo: • Passagem de parâmetros por referência pode causar a alteração do valor da variável ou estrutura original Curso de Sistemas de Informação – PUC Minas Programação Orientada por Objetos Prof. João Caram Métodos (C#) Passagem de parâmetros por referência (out) public void RetornaEndereco(out int numero, out string rua) { numero = this.numero; rua = this.rua; } int numeroLocal; string ruaLocal; novoCliente.RetornaEndereco(out numeroLocal, out ruaLocal); // numeroLocal e ruaLocal são inicializados Parâmetros • ATENÇÃO Em C#, algumas estruturas são sempre passadas por referencia Ex: vetores matrizes objetos Curso de Sistemas de Informação – PUC Minas Programação Orientada por Objetos Prof. João Caram Exercícios • Escreva um método “quantosDias” que receba como parâmetro uma data composta por dia, mês e ano e retorne o número de dias decorridos no ano até a data fornecida. Curso de Sistemas de Informação – PUC Minas Programação Orientada por Objetos Prof. João Caram Exercícios • Escreva um algoritmo que leia os votos de 15 eleitores para presidente. Os candidatos são: 19 – Machado de Assis 21 – Guimarães Rosa 33 – Cecília Meireles Ao final da votação, o algoritmo deve mostrar o resultado final em número de votos e em porcentagem. Curso de Sistemas de Informação – PUC Minas Programação Orientada por Objetos Prof. João Caram Exercícios • Escreva um método que esteja preparado para receber 10 números inteiros do usuário. Esses números devem ser inseridos em um vetor por meio de um métodoparametrizado. Ao final das leituras e inserções, o vetor deve ser exibido na ordem crescente de valores. Curso de Sistemas de Informação – PUC Minas Programação Orientada por Objetos Prof. João Caram Exercícios • Escreva um método que esteja preparado para receber 10 números inteiros do usuário. Esses números devem ser inseridos em um vetor por meio de um método parametrizado. Ao final das leituras e inserções, outro método deve retornar o menor e o maior valor presentes no vetor. Curso de Sistemas de Informação – PUC Minas Programação Orientada por Objetos Prof. João Caram Exercício Qual é a saída do programa? class RefExample { static void Method(ref int i) { i = i + 44; } static void Main() { int val = 1; Method(ref val); Console.WriteLine(val); } } Exercício Qual é a saída do programa? class OutExample { static void Method(out int i) { i = 44; } static void Main() { int value; Method(out value); } } Exercícios TELEVISÃO Implemente uma classe Televisão que tenha metodos para ligar e desligar, aumentar ou diminuir o volume (com minimo de 0 e maximo de 100) e subir ou baixar o canal (entre 1 e 83) Implemente um programa que crie um objeto da classe Televisão e simule seu uso. Exercícios DATA Implemente a classe Data utilizada como exemplo. Dica: use um nome diferente de Data (dados, em inglês, é palavra reservada em algumas linguagens de programação) Implemente um programa que crie objetos da classe Data e simule seu uso.
Compartilhar