Conceitos de Programação Orientada a Objetos

Documentos relacionados
Programação Orientada a Objetos. Vagner Luz do Carmo - Vluzrmos

Classes e Objetos. Sintaxe de classe em Java

Linguagem de Programação III

Paradigmas de Linguagens de Programação. Suporte para Programação Orientada a Objeto

Classe Abstrata e Interface

Programação Orientada a Objetos. Professor: André Luis Meneses Silva br.geocities.com/programacao2ufs

Programação Java. Marco Fagundes. - Herança, Classes Abstratas e Interfaces Marco Fagundes -

Lista 05 Herança. public class PessoaFisica extends Pessoa { private String RG; public PessoaFisica(){ super(); } public String getrg(){ return RG; }

Linguagens de Programação Aula 12

UNIVERSIDADE PAULISTA - UNIP ICET INSTITUTO DE CIÊNCIAS EXATAS E TECNOLÓGIA

Linguagem de Programação I Apresentação da Disciplina

Linguagem de Programação III

Introdução ao Java. Prof. Herbert Rausch Fernandes

TÉCNICAS DE ORIENTAÇÃO A OBJETOS

Programação Orientada a Objetos Flávio de Oliveira Silva 144

SEMINÁRIOS INTEGRADOS EM ADS PROGRAMAÇÃO ESTRUTURADA E ORIENTADA A OBJETOS

Lição 11 Herança, polimorfismo e interfaces

Programação Orientada a Objetos

Herança Tiago Eugenio de Melo

O PARADIGMA ORIENTADO POR OBJETOS

Linguagem de Programação Orientada a Objeto Polimorfismo, Classes Abstractas e Interfaces

COMPORTAMENTOS - Observações

UNIVERSIDADE FEDERAL DE MATO GROSSO DO SUL SISTEMAS DE INFORMAÇÃO - CÂMPUS DE COXIM FUNDAMENTOS EM ORIENTAÇÃO A OBJETOS

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Programação Java (nível intermediário) 4. Polimorfismo

Java para Desktop. Programação Orientada à Objetos 2 JSE

Programação Orientada a Objetos

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Programação por Objectos. Java

Interfaces e Classes Abstratas

9 Classes Abstractas e Interfaces

Programação Orientada a Objetos. Métodos e Atributos. Métodos. Métodos. Alexandre César Muniz de Oliveira. Parte III

AULA 8 Polimorfismo de: coerção, overloading, inclusão e paramétrico Prof. Dr. Fernando Henrique Campos

POO29004 Programação Orientada a Objetos

Interfaces. Universidade Católica de Pernambuco Ciência da Computação. Prof. Márcio Bueno.

POO e C++: Herança e Polimorfismo

C com introdução a OO

Linguagem de Programação IV Introdução

Computação II Orientação a Objetos

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan

Polimorfismo. O que é polimorfismo?

Notas de Aula 04: Herança e polimorfismo.

Programação Avançada C++ Slide 12 Nielsen Castelo Damasceno

Laboratório de programação II

Introdução à orientação a objetos. João Tito Almeida Vianna 18/05/2013

Herança. Herança. Herança. Herança. Herança. Programação Orientada a Objetos

Orientação a objetos. Programação. Orientada a Objetos. Orientação a objetos. Orientação a objetos. Abstração e encapsulamento

Aula 4 Encapsulamento e Relacionamento Cleverton Hentz

Fundamentos Básicos da linguagem Java (Programação Orientada a Objetos) Prof. Responsáveis Wagner Santos C. de Jesus

Linguagem de Programação II Herança

Aula 9 Herança. Prof. Jefersson Alex dos Santos

[Linguagem de Programação 3] [Aula 01] [Gustavo Yoshio Maruyama]

Universidade Federal de Uberlândia

Modelo do Mundo Real. Abstração. Interpretação

Introdução à Programação. Encapsulamento e Herança

Unidade: sobrecarga, construtores e herança

Aula 10 POO 1 Classes Abstratas. Profa. Elaine Faria UFU

Encapsulamento e Métodos (Construtores e Estáticos) João Paulo Q. dos Santos

Programação OO em Java. Profa Andréa Schwertner Charão DELC/CT/UFSM

Herança e Polimorfismo - Parte II -

Computação II Orientação a Objetos

Herança. Prof. Fernando V. Paulovich 23 de agosto de 2010

Curso Profissional de Gestão e Programação de Sistemas Informáticos

Programação Orienta a Objetos

Java First-Tier: Aplicações. Herança: Simples Múltipla. Orientação a Objetos em Java (III) Problemas de Herança Múltipla.

Aula 2 Princípios Básicos da Orientação a Objetos (Parte II)

Programação Orientada a Objectos - P. Prata, P. Fazendeiro. Hierarquia de classes e mecanismo de ligação

Programação de Computadores - I. Profª Beatriz Profº Israel

Linguagem de programação Programação Orientada a objetos

Programação Orientada a Objetos JAVA - NETBEANS

Capítulo 2. Orientação a Objetos

A B Classe Genérica D A C. Classe Especializada. Classe Especializada. Características Herdadas

Linguagem de Programação. Diagrama de classes

Professor Leonardo Cabral da Rocha Soares Lattes:

Computação II - Java - Teste 1.2 Prof. Adriano Joaquim de Oliveira Cruz 2015/04/27

Programação Orientada a Objetos II

Linguagem de Programação II Programação Orientada a Objetos. Orientação a Objetos

Recapitulando. Construtores: (Overload assinatura) public Circle() {...} public Circle(double x, double y, double r) {... }

Herança. Universidade Católica de Pernambuco Ciência da Computação. Prof. Márcio Bueno.

Programação Orientada a Objetos em Java

Programação Orientada a Objetos para Redes de Computadores. Polimorfismo com Hierarquias de Herança. Exemplo: Hierarquia Animal

Unidade: Classes Abstratas, Polimorfismo, Sobreposição e Interfaces

Linguagem de Programação Orientada a Objeto Abstração - Encapsulamento

UNIFEI Disciplina Professor

E N C A P S U L A M E N T O P R O F. M E. H É L I O E S P E R I D I Ã O

Sobrecarga, Sobreposição e Polimorfismo

Orientação a objetos. Objetos ou Instâncias I

Modificadores de Acesso JAVA

Vejamos o seguinte exemplo public class Exemplo private int testada = 20; public void testapalavra(int testada) JOptionPane.showMessageDialog(null,"Pa

Programação I Curso: Sistemas de Informação. Prof.: José Ronaldo Leles Júnior .:

Classes e Objetos INTRODUÇÃO À ORIENTAÇÃO A OBJETOS COM JAVA - MÓDULO II. Classes. Objetos. Um modelo para a criação de objetos

Programação OO em Java. Profa Andréa Schwertner Charão DLSC/CT/UFSM

PADRONIZAÇÃO 10. INTERFACES PADRONIZAÇÃO CONTRATOS

Rafael B. Pereira (

Definição. Em POO, a abstração é o processo de esconder os detalhes de implementação de uma aplicação.

Engenharia de Software. Aula 10 Representação dos Conceitos de Orientação a Objetos. Prof. Me. Rogério Ferreira

Visibilidade e Encapsulamento

Polimorfismo. PARTE II: Java e OO. Polimorfismo. Polimorfismo. Polimorfismo. Polimorfismo

4 Conceito de Herança

Transcrição:

Conceitos de Programação Orientada a Objetos Tatyana Bitencourt Com as técnicas de orientação a objeto, é possível obter resultados considerados impossíveis pensando de maneira estruturada. Como Java não deixa ao programador a opção de escrever ou não orientado a objetos (como em C++), os conceitos de oop devem estar bem fundamentados. Abstração A capacidade de determinar o problema de maneira geral, dando importância apenas aos seus aspectos relevantes e ignorando os detalhes é chamada de abstração. Existem dois tipos de abstração: Abstração de dados e Abstração de Procedimentos. - Abstração de dados Abstração de dados é a definição de um tipo de dado por seu comportamento e estado, utilizandose métodos. A manipulação desse dado é realizada apenas através de seus métodos. Um exemplo é classificar uma lista a partir das operações aplicadas a ela, como inserção e remoção. Qualquer objeto do tipo lista só pode sofrer modificações através dessas operações. - Abstração de procedimentos Consiste em considerar um procedimento com uma operação bem definida como algo único, mesmo que utilize outros procedimentos internos. Usamos abstração de procedimentos quando uma função divide-se em outras sub-funções, que por sua vez decompõem-se em outras funções. Classe Tipo definido pelo usuário. Contém a especificação da classe, identificando seus atributos (dados) e seus métodos (comportamento da classe). A definição de uma classe não é responsável pela criação de nenhuma instância, portanto não ocupa uma parte da memória. Considere a classe a seguir: public class Person private String name; public Person(String a) name = a; //copia a para name public String getname() return name; return "Nome: " + name; Grupo de Usuários Java Página 1

A instrução inicial public class Person declara uma classe chamada Person, que possui como um atributo private String name; e três métodos públicos: public Person(String a); public String getname(); ; Objeto Em uma linguagem procedural, a instância de uma estrutura é chamada de variável. Já uma instância de uma classe é chamada de objeto. A classe informa a cada objeto suas características (dados) e seu comportamento (métodos). Suas características são informadas pela declaração de variáveis de tipo primitivo (int, float, etc...) ou classes anteriormente definidas. Seus métodos são definidos por funções, possibilitando a conversa entre dois objetos. - Criando objetos Após a definição da classe Person, a instrução Person x = new Person("Maria"), y = new Person( Andre ); cria dois objetos da classe definida anteriormente Person, passando a ocupar realmente um espaço na memória. - Funções-Membro Quando um objeto chama um método de sua classe (função-membro), costuma-se dizer que uma mensagem foi enviada. Assim, a instrução x.tostring(); envia uma mensagem a x, pedindo que retorne seu conteúdo como String. Encapsulamento Encapsulamento consiste em esconder detalhes (dados) e oferecer uma interface comum aos objetos (métodos). Toda vez que uma alteração deve ser feita em alguma variável de instância, deve ser feita através de um método da classe. Caso alguma modificação ocorra em alguma variável de instância, sabe-se exatamente quais métodos interagiram com a variável, prevenindo alterações acidentais. É permitido ao usuário ver apenas os dados necessários, todo o resto é mantido escondido, através de especificadores de acesso (public, private, protected). A utilização de encapsulamento também favorece a reusabilidade e manutenção do código. Dessa maneira, a instrução System.out.println( Nome:,name); chamada por qualquer outro objeto causará um erro, pois o atributo name não está visível (através do modificador private). Para realizar a impressão da variável name é necessário então chamar um método de x: Grupo de Usuários Java Página 2

System.out.println(x.toString()); Herança Herança é a criação de novas classes, chamadas classes derivadas, a partir de classes já existentes, as classes-base. Alguns dos benefícios da utilização de herança é a reutilização do código da classe base, além da possibilidade de implementação de classes abstratas genéricas. Ao implementar um applet, utiliza-se a seguinte instrução: public class HelloApplet extends JApplet... A palavra chave extends indica que HelloApplet é uma classe derivada de JApplet. Isso siginifica que a classe HelloApplet herda por exemplo, os métodos init() e start() de JApplet. Num applet, pode-se definir novos atributos e métodos, bem como sobrescrever os métodos herdados de JApplet, como o init(). Uma classe derivada (ou subclasse) pode realizar todas as funções que a classe-base (ou superclasse) realizaria. A subclasse herda todos os métodos public da superclasse, mas não possui acesso a nenhum membro private de sua classe-base. Se isso fosse possível, não haveria motivo algum em realizar o encapsulamento de dados. Além disso, uma subclasse pode acrescentar mais alguns métodos ou atributos àqueles herdados da superclasse, possuindo características particulares em relação à classebase. Especificador de acesso protected Além de public e private, Java permite um terceiro tipo de modificadores de acesso: protected. Métodos e atributos declarados como protected possuem um nível intermediário de proteção. Um membro protected é como um membro private, exceto pelo fato de que ele pode ser acessado pelas classes derivadas de uma superclasse. Cada vez que deseja-se utilizar algum método da superclasse, utiliza-se a palavra-chave super seguida pelo operador ponto (. ). Considere a classe Student: public class Student extends Person private String grade; // serie cursada private int classes; // aulas que frequenta... public Student(String n, String g) classes = 0; return super.tostring() + \ngrade: + grade; //fim da classe Student Grupo de Usuários Java Página 3

A classe acima ilustra a criação de uma subclasse Student que herda os atributos e métodos de Person. Uma subclasse não herda os construtores de sua superclasse, mas pode invoca-los através do comando super. A chamada a essa função deve ser a primeira instrução no construtor da subclasse, caso contrário ocorrerá erro. Caso a chamada ao construtor base não tivesse sido feita explicitamente em Student(String n, String g), uma chamada ao construtor default (sem argumentos) da classe base seria realizada. Em Java não é permitido o uso de herança múltipla como em C++, o que pode ser contornado com o uso de interfaces. Por que Java não suporta herança múltipla Algumas das características da linguagem Java é ser familiar, simples, segura, robusta, etc. Os projetistas da linguagem fizeram-na parecida com C++ (atingindo o conceito de ser familiar) e decidiram não implementar algumas características que tornavam a linguagem C++ um tanto complexa, como herança múltipla e sobrecarga de operadores. Eles simplesmente verificaram que o trabalho não valia a pena. Para contornar esse fato, foi inspirado na linguagem Objective C que surgiu o conceito de interfaces. Um objeto pode herdar diversos métodos, com a condição de que implemente-os. Fonte: Java World (http://www.javaworld.com/javaqa/2002-07/02-qa-0719- multinheritance.html) Classes abstratas Uma classe abstrata é utilizada quando deseja-se fornecer uma interface comum a diversos membros de uma hierarquia de classes. Os métodos declarados na classe abstrata serão implementados em suas subclasses, através de polimorfismo. Considere as seguintes modificações na classe Person: public abstract class Person private String name; public Person(String a) name = a; //copia a para name public String getname() return name; return "Nome: " + name; public abstract String gettype(); Grupo de Usuários Java Página 4

O método gettype() retorna o tipo de pessoa (estudante, professor, funcionario, etc). A inclusão do método public abstract String gettype(); indica que a classe Person é uma classe abstrata, o que justifica a inclusão da palavra-chave abstract na definição da classe. Nenhum objeto da classe Person poderá ser instanciado agora. Agora a classe Student deve se adequar às mudanças realizadas. Ao extender Person, a subclasse possui também um método abstrato, e caso não o sobrescreva será também uma classe abstrata. A classe Student ficaria mais ou menos assim: public class Student extends Person private String grade; // serie cursada private int classes; // aulas que frequenta... public Student(String n, String g) classes = 0; return super.tostring() + \ngrade: + grade; public String gettype() return Student ; //fim da classe Student Implementando o método gettype(), a classe Student é agora uma classe concreta. Diferenças entre classe abstrata e interface As semelhanças entre classe abstrata e interface são muitas. Uma interface é utilizada quando não existe a necessidade das classes derivadas herdarem métodos já implementados. Outra diferença é que interfaces não permitem a declaração de atributos, como as classes abstratas. Polimorfismo Polimorfismo caracteriza a criação de funções com um mesmo nome, mas códigos diferentes, facilitando a extensão de sistemas. Um tipo de polimorfismo é a redefinição de métodos para uma classe derivada. Para que isso aconteça, o método deve possuir o mesmo nome, tipo de retorno e argumentos do método sobrescrito. O acréscimo de um segundo construtor à classe Student, como mostra o exemplo, é um exemplo de sobrecarga de métodos. public class Student extends Person Grupo de Usuários Java Página 5

private String grade; // serie cursada private int classes; // aulas que frequenta... public Student(String n, String g) classes = 0; public Student(String n, String g, int c) classes = f;... //fim da classe Student Quando ocorre a instanciação dos objetos: Student s1 = new Student( Maria, 5 ), s2 = new Student ( João, 8,5); O objeto s1 utiliza o primeiro construtor, pois os tipos de argumento são os mesmo. Já o objeto s2 utiliza o segundo construtor, por ter além dos dois argumentos do tipo String, um outro do tipo int. Em Java não é possível realizar a sobrecarga de operadores como em C++. Conclusão O fato de Java ser orientado a objetos contribui muito para sua utilização no desenvolvimento de sistemas, cada vez mais complexos. Sendo uma linguagem orientada a objetos, Java pode usufruir do melhor das antigas linguagens também orientadas a objetos, como Smaltalk, Objective C, C++. Além disso, a utilização de técnicas como herança e polimorfismo facilitam ainda mais a extensão do software, uma característica extremamente importante em tempos em que a política de não reinventar a roda é cada vez mais forte. Tatyana Bitencourt (tbso@dct.ufms.br.br) é programadora e estudante de Ciência da Computação (UFMS). Grupo de Usuários Java Página 6