Em programação orientada a objetos, um objeto passa a existir a partir de um "modelo“ (classe);...

Post on 21-Apr-2015

106 views 0 download

Transcript of Em programação orientada a objetos, um objeto passa a existir a partir de um "modelo“ (classe);...

Cap2. Conceitos de orientação a objetos

Em programação orientada a objetos, um objeto passa a existir a partir de um "modelo“ (classe); a classe define o comportamento do objeto, usando atributos (propriedades) e métodos (ações).

1. Introdução á Programação Orientada a Objeto

É uma referência a um local da memória que possui um valor. Um objeto é uma instância de uma classe.

2.Objeto / instância

São características (propriedades) de um objeto

3.Atributo 

Exercícios de Fixação

1. Escreva um modelo para representar uma lâmpada que está à venda em um supermercado. Que dados devem ser representados por este modelo?

1. Crie um modelo Livro que represente os dados básicos de um livro, sem se preocupar com a sua finalidade.

São as ações que a Classe poderá realizar. Quando um objeto desta classe receber uma mensagem de algum outro objeto contendo o nome de um método, a ação correspondente a este método será executada.

3.Operações e Métodos

public class Conta { private Double saldo;

public void setSaldo(Double saldo) { this.saldo = saldo;

}

public Double getSaldo() { return saldo;

}

public void depositar(Double valor){ saldo += valor;

}

public void verificaSaldo(){ System.out.println("Valor do Saldo: "+getSaldo()); }

}

<? class conta { var $saldo;

function conta () { $this.saldo = 0;

} function saldo() {

return $this->saldo; } function credito($valor) {

$this->saldo += $valor; } }

?>

public class Pessoa{ int _id; string _nome; DateTime _dataNascimento; public int CalcularIdade() { int idade = DateTime.Now.Year - this._dataNascimento.Year; return (idade); } public int CalcularIdade(DateTime dataReferencia) { int idade = dataReferencia.Year - this._dataNascimento.Year; return (idade); }}

class ValoresInt { public int calculadora() {

int a = 10; int b = 20;

int c = a + b; return c;

} }

public class Metodo_Com_Retorno_Inteiro { public static void main(String[] args) {

ValoresInt valores = new ValoresInt();

System.out.print(valores.calculadora()

); }

}

// Declaração do métodoint soma(int x, int y){ return x + y;}

// e para chamar o métodoint a = 2;int b = 3;int resultado = soma(a, b);

Exercícios de Fixação

1. Escreva uma classe para conter três membros do tipo inteiro chamados hora, minutos e segundos e chame-a de tempo.

Crie um método para solicitar a hora, os minutos e os segundos para o usuário.

Crie um método para imprimir a hora no formato hh:mm:ss.

É uma chamada a um objeto para invocar um de seus métodos, ativando um comportamento descrito por sua classe.

4.Mensagem   

public static void main(String[] args) {//INSTANCIA A CLASSE CONTA

nconta = new Conta(); //DEFINE UM VALOR DE SALDO

nconta.setSaldo(633.00); //DEFINE VALOR PARA DEPOSITAR

nconta.depositar(555.0); //RESGATA VALOR

nconta.verificaSaldo(); }

Representa um conjunto de objetos com características comuns.

5.Classe

class TV {int tamanho;int canal;boolean

ligada;}

Classe em Java

Classe em VB.netClass ClasseSimples2 Private MemberVal1 As Long Protected MemberVal2 As Long Public MemberVal3 As Long End Class

public class Pessoa{ int _id; string _nome; DateTime _dataNascimento;}

Classe em C#

class conexao{var $ip = "localhost";var $user = "root";var $pass = "";var $database = "projeto";}

Classe em PHP

Exercícios de Fixação

1. Em uma determinada Imobiliária precisamos tratar os seguintes dados:

Os Imóveis á serem alugadosOs Proprietários Os locatáriosOs aluguéis a serem pagosCrie uma modelo de dados básico para cada uma

das classes.

2. Desenvolver um sistema de cadastro de Pessoas, Alunos e Professores.

Sendo que as Alunos terão como que cadastrar as notas equivalentes ao semestre

É a criação de um objeto a partir de uma classe.

6.Instanciação

Ex:apto1: novo Apartamento()apto1.Editar_Apto()fez a chamada do método Editar_apto() na instância apto1

Linha de criação de uma instânciaNome da instancia: novo Nome da Classe ao qual pertence

private void button1_Click(object sender, EventArgs e){ //Instanciando um objeto Socio soc = new Socio(); //Inserindo atributos soc.Nome = "Thiago Montebugnoli"; soc.Rg = "41.999.999-9"; soc.Cpf = "312.999.999-99"; soc.Nascimento = DateTime.Parse("15/11/1984"); soc.Telefone = "(14) 9999-9999"; soc.Endereco = "Rua Fulano de Tal, 999"; //Invocando métodos soc.Cadastrar(); if (soc.ConfirmarCadastro(1)) MessageBox.Show("Cadastro Confirmado!"); if (soc.ValidarSocio(1)) MessageBox.Show("Sócio Validado!"); soc.Alterar();}

4.Herança (ou generalização)    Mecanismo pelo qual uma classe pode estender outra classe aproveitando seus métodos e atributos. 

 

class Pessoa class Fisica : Pessoa class Juridica : Pessoa

Public Class PessoaFisica Inherits Pessoa

class Carro extends Veiculo

A classe que concede as características a uma outra classe.

Classe Base (Super Classe) (Classe Pai)

<?class conta {

var $saldo;function saldo() {

return $this->saldo;}function credito($valor) {

$this->saldo += $valor;}

}$minhaconta = new conta;$minhaconta->saldo();// a variavel interna não foi inicializada, e não contém valor algum$minhaconta->credito(50);$minhaconta->saldo(); // retorna 50?>

A classe que herda as características da classe base.

Classe Derivada (Sub Classe) (Classe Filho)

Determina que uma classe herdará características de apenas uma classe base.

Herança Simples

<?phpclass ChequeEspecial extends ChequeComum{

public function calculaJuros(){

return $this->valor * 1.10; // soma 10% em cima do valor}

}?>

Determina que uma classe herdará características de duas ou mais classes base.

Herança Múltipla

 Class B           ' primeira classe filha ou subclasse da classe Pai       Inherits A     ' esta linha indica que esta classe herda da classe A       Public Sub B()           System.Console.Write("B")       End Sub   End Class

Class A   'classe Pai ou classe base.         Public Sub A()            System.Console.Write("A")        End Sub    End Class

Class C 'segunda classe filha Inherits B ' esta linha indica que esta classe herda da classe B Public Sub C() System.Console.Write("C") End Sub End Class

//Pessoa

namespace Heranca

{

public class Pessoa

{

public string Nome {

get; set;

}

public void escreverNome()

{

Console.Write(this.Nome);

}

}

}

//Pessoa Física

namespace Heranca

{

public class Fisica : Pessoa

{

public string Cpf {

get; set;

}

public Boolean validarCpf() {

return this.Cpf.Length == 11;

}

}

}

//Pessoa Jurídica

namespace Heranca

{

public class Juridica : Pessoa{

public string Cnpj { get; set;

}

public Boolean validarCnpj()

{

return this.Cnpj.Length == 14;

}

}

}

Exercícios de Fixação

Crie a seguinte hierarquia de Classes:

Crie a seguinte hierarquia de Classes:

5.Classes Abstratas   Uma classe abstrata é desenvolvida para representar

entidades e conceitos abstratos. A classe abstrata é sempre uma superclasse que não possui instâncias. Ela define um modelo (template) para uma funcionalidade 

- Uma classe abstrata é uma classe que não pode ser instanciada. Você não pode criar um objeto a partir de uma classe abstrata.

- Uma classe abstrata pode ser herdada e geralmente serve como classe base para outras classes.

- Uma classe abstrata pode conter métodos abstratos e métodos comuns. Uma classe abstrata também podem possuir construtores, propriedades, indexadores e eventos.

CARACTERISTICAS DA CLASSE ABSTRATA

CARACTERISTICAS DOS MÉTODOS ABSTRATOS:

- Um método abstrato é um método que não possui implementação na classe abstrata.

Um método abstrato possui somente a definição de sua assinatura.

A sua implementação deve ser feita na classe derivada.

Muitas formas geométricas possuem área, perímetro e cor, porém cada forma geométrica tem sua fórmula particular para calcular a área e o perímetro

public abstract class Forma { private double _area; private string _cor; private double _perimetro;

public string Cor { get { return _cor; } set { _cor = value; } }

public double Area { get{

return _area; }

set { _area = value; }

}

public double Perimetro { get{ return _perimetro; } set{ _perimetro = value; } }

Vamos definir a classe Quadrado que vai herdar da classe Forma

public class Quadrado : Forma { private double lado; public double Lado { get {return lado;} set {lado = value;} }

}

public override void CalcularArea() { this.Area = lado * lado; }

public override void CalcularPerimetro() { this.Perimetro = 4 * lado; }

6.Persistência / Serialização.  É a capacidade de um objeto de salvar seus dados para uso

em outro momento. Este termo é muito utilizado quando falamos de banco de

dados, onde um objeto salva os dados em uma tabela. Imaginamos que no objeto pessoa temos as propriedades,

Nome, Telefone e CPF e precisamos salvar estes dados para que quando o aplicativo for fechado possamos recuperar o mesmo ao abrir o aplicativo novamente.

//popular o objeto pessoaPessoa pessoa = new Pessoa();pessoa.Nome = "Marcelo";pessoa.CPF = "000.000.000-00";pessoa.Telefone = "(00) 0000-0000";

//criar o objeto que irá serializar a pessoa em XMLSystem.Xml.Serialization.XmlSerializer x =new System.Xml.Serialization.XmlSerializer(pessoa.GetType());

//salvar no arquivo XML pessoa.xmlSystem.Xml.XmlTextWriter xmlWriter =new System.Xml.XmlTextWriter("pessoa.xml", Encoding.UTF8);

//serializar para pessoa.xmlx.Serialize(xmlWriter, pessoa);

//liberamos o arquivo xmlxmlWriter.Flush();xmlWriter.Close();

//Neste momento se você abrir o arquivo pessoa.xml//em algum editor//verá os dados do objeto pessoaSystem.Xml.XmlTextReader xmlReader =new System.Xml.XmlTextReader("pessoa.xml");

//recuperar os dados e popular o objeto pessoa.pessoa = (Pessoa)x.Deserialize(xmlReader);

//como teste, iremos passar o nome para uma variável stringstring nomePessoa = pessoa.Nome;

Foca nos aspectos essenciais dos objetos, representando apenas características relevantes ao sistema

Abstrair significa separar mentalmente, considerar isoladamente, simplificar. Assim nossosistema deve ser separado de forma lógica com o objetivo de simplificar.

Sendo assim existem classes que chamamos de classes estruturais. Elas são responsáveis por manter uma estrutura padrão para seus filhos, indepentende do seu número. Ou seja, essas classes nunca serão instanciadas, pois somente seus filhos serão usados

7.Abstração

É a relação mais comum entre dois objetos. Quando acontece? Quando uma classe “usa”

outra classe. Exemplo: Um motorista utiliza (depende do carro,

mas este não faz parte do motorista) o carro para trabalhar. 

8.Associações

Neste caso, o objeto-pai é responsável pela criação e destruição de suas partes.

O objeto-pai realmente “possui” as instâncias de suas partes. Resumidamente, um só existe caso o outro também exista.

Composição

Neste exemplo, a classe cliente será responsável por instanciar contato.

Na agregação o objeto agrega outro objeto, ou seja, torna um objeto externo parte de si..

Assim o objeto pai poderá utilizar funcionalidades do objeto agregado, mas ele não depende dele (agregado) para existir.

Agregação

Exemplo: O produto esta no carrinho de compras mas nem um dos dois precisa do outro para existir.

Encapsulamento vem de encapsular, que em programação orientada a objetos significa separar o programa em partes, o mais isolado possível.

A ideia é tornar o software mais flexível, fácil de modificar e de criar novas implementações.

O Encapsulamento serve para controlar o acesso aos atributos e métodos de uma classe

9.Encapsulamento

public class Pessoa{ private String nome; private String sobrenome; private String dataNasc; private String rg; private String[] telefones;

}

Capacidade dos objetos assumirem várias formas

10.Polimorfismo

<?php

class ChequeComum

{

private $valor;

// ... outros métodos da classe

public function setValor( $valor )

{

$this->valor = $valor;

}

public function getValor()

{

return $this->valor;

}

public function calculaJuros()

{

return $this->valor * 1.25; // soma 25% em cima do valor

}

}

?>

<?phpclass ChequeEspecial extends ChequeComum{ public function calculaJuros()

{return $this->valor * 1.10; }

}?>

Compartilhar métodos e dados de um objeto com outro. (Reaproveitamento de código)

Herança e polimorfismo.

Reaproveitamento de código.

11.Compartilhamento

Exercícios Complementares

Pag.90 á 94