Índice 1.1 - Introdução História A plataforma Java 1.2 - Conceitos Fundamentais na programação por objectos Objectos Encapsulamento Classes Herança Polimorfismo Interfaces Pacotes 1/24
1.1 Introdução 1.1 - Introdução História A plataforma Java 1.2 -- Conceitos Fundamentais na programação por objectos Objectos Encapsulamento Classes Heran Herançça a Polimorfismo Interfaces Pacotes 2/24
1.1 Introdução Programação Avançada Introdução: Programação procedimental (exemplo C, pascal, fortran ) Programas simples, usando tipos primitivos, estruturas de controlo, rotinas,. -A modularização é fundamentalmente realizada em: -Funções -Procedimentos A especificação dos dados e operações realizadas sobre esses dados são separadas: -Requer o envio de dados para os procedimentos e funções (através de argumentos) 3/24
1.1 Introdução Programação Avançada Introdução: Programação Orientada por Objectos (exemplo Java, C++, ) Aumenta os mecanismos de abstracção da linguagem procedimental -Providencia maior flexibilidade, modularidade, clareza, reutilização e robustez. Dados e operações sobre esses dados são modularizados dentro de uma única entidade: classe. -Assunção: No mundo em que vivemos tudo são objectos. Os programas descrevem esse mundo. -Objectos têm determinado estado e comportamento. -Implica que organizemos a nossa visão do mundo e/ou de um problema em termos de objectos, seu estado e comportamento. 4/24
1.1 Introdução Programação Avançada História História: [Anos 60] Simula-67, Dahl e Nygaard da Universidade de Oslo -Primeira linguagem com conceitos OO [Anos 70] Smalltalk da Xerox -Primeira implementação prática de uma linguagem OO [Anos 80] C++ do Bell Labs -Extenção do C, com conceitos OO -Popularizou a metodologia de programação OO [Anos 90] Java, James Gosling da Sun Microsystems -Sintaxe próxima do C -Programas executados numa máquina virtual. Este facto permite portabilidade, mas torna o Java muito lento (50 vezes pior que o C) [Anos 00] C # (C Sharp) da Microsoft -Derivado do Java para a plataforma.net http://java.sun.com/docs/white/langenv/ 5/24
1.1 Introdução Programação Avançada A Plataforma Java A plataforma Java: O Java é uma linguagem orientada por objectos que se diferencia pela portabilidade. -O Java é independente da plataforma de Hardware -O Java é independente do sistema operativo Os programas Java são escritos em ficheiros de texto e compilados numa linguagem chamada: -Java ByteCodes -Os ByteCodes não contêm código para o processador nativo de um sistema. Em vez disso são interpretados por uma entidade Java Virtual Machine que corre os programas Java Código Fonte ByteCodes Solaris, Windows, Linux, MAC OS, etc 6/24
1.1 Introdução Programação Avançada A plataforma Java: A plataforma JAVA tem dois componentes e é inteiramente composta por software: -A Java Virtual Machine (JVM) -A Java Aplication programming interface (API) A API é uma enorme colecção de componentes de software previamente desenvolvidos que providenciam muitas funcionalidades. Esta colecção está agrupada em bibliotecas de classes e interfaces chamadas pacotes. 7/24
1.1 Introdução Programação Avançada A plataforma Java: Compilar e executar um programa: 8/24
1.2 Conceitos Fundamentais em OOP 1.1 -- Introdução Hist História A A plataforma Java 1.2 - Conceitos Fundamentais na programação por objectos Objectos Encapsulamento Classes Herança Polimorfismo Interfaces Pacotes 9/24
Objectos Objectivo: Transportar a vida real para a programação Objecto: -Algo que existe na vida real que partilham 2 caracteristicas: Estado e Comportamento. -Em OOP, os objectos de software armazenam o estado em campos (variáves noutras linguagens). -Os objectos expõem o seu comportamento através de métodos (funções noutras linguagens). -Os métodos operam no estado interno do objecto. São o mecanismo primário de comunicação entre objectos. Ou por outras palavras são o interface do objecto Exemplos de Objectos, campos e métodos: Objecto : Cão Campos (estado): Nome, Raça, Cor, etc. Métodos (comportamento): Buscar, Abanar cauda, etc. Objecto : Bicicleta Campos (estado): Mudança, Velocidade,etc. Métodos (Comportamento): AlteraMudança,etc. Especificar um sistema consiste em definir um conjunto de objectos 10/24
Encapsulamento Encapsulamento: Exemplo: -Os dados e métodos associados a um objecto são encapsulados (colocados numa cápsula) de modo a que apenas parte do conteúdo seja acessível. -O encapsulamento providencia uma forma de interagir com o objecto, mas omite os detalhes de como o objecto trabalha. -Encapsular é muitas vezes denominado ocultar informação (information hiding). -Uma bicicleta é constituida por muitas peças e partes e é capaz de efectuar várias acções -Conhecer os pedais, manipulos de travão, manipulação do guiador é importante para o ciclista -Conhecer o funcionamento da transmissão e sistema de travagem não é importante para o motorista. O encapsulamento é um principio fundamental da programação orientada a objectos 11/24
Classes: Exemplo: Programação Avançada Classes -Os objectos similares, do mesmo tipo são agrupados em classes. -Na realidade, em programação OO temos que especificar as classes e não os objectos. Os objectos surgem como instâncias das classes. -Especificamos a classe bicicleta como possível implementação de uma bicicleta. -Admitimos que essa bicicleta possa ter várias instâncias. O sistema assim construído consiste numa comunidade de objectos (instâncias de classes) que interagem uns com os outros (através de chamadas a métodos). Os objectos da comunidade evoluem independentemente uns dos outros 12/24
class Bicycle { int cadence = 0; int speed = 0; int gear = 1; Programação Avançada Exemplo de implementação da classe bicicleta em JAVA Expecificação da classe (template) void changecadence(int newvalue) { cadence = newvalue; void changegear(int newvalue) { gear = newvalue; void speedup(int increment) { speed = speed + increment; void applybrakes(int decrement) { speed = speed - decrement; void printstates() { System.out.println("cadence:"+cadence+" speed:"+speed+" gear:"+gear); Delimitadores da classe 13/24
class Bicycle { int cadence = 0; int speed = 0; int gear = 1; Programação Avançada Exemplo de implementação da classe bicicleta em JAVA Expecificação da classe (template) Campos: representam o estado do objecto void changecadence(int newvalue) { cadence = newvalue; void changegear(int newvalue) { gear = newvalue; void speedup(int increment) { speed = speed + increment; void applybrakes(int decrement) { speed = speed - decrement; void printstates() { System.out.println("cadence:"+cadence+" speed:"+speed+" gear:"+gear); 14/24
Exemplo de implementação da classe bicicleta em JAVA class Bicycle { int cadence = 0; int speed = 0; int gear = 1; Expecificação da classe (template) void changecadence(int newvalue) { cadence = newvalue; void changegear(int newvalue) { gear = newvalue; void speedup(int increment) { speed = speed + increment; void applybrakes(int decrement) { speed = speed - decrement; void printstates() { System.out.println("cadence:"+cadence+" speed:"+speed+" gear:"+gear); Métodos: definem como interage com o mundo exterior 15/24
Exemplo de implementação da classe bicicleta em JAVA - A responsabilidade de criação dos objectos está noutra classe definida na nossa aplicação. Essa classe principal deverá conter obrigatoriamente o método main(). class BicycleDemo { public static void main(string[] args) { Bicycle bike1 = new Bicycle(); Bicycle bike2 = new Bicycle(); Cria dois objectos bicicleta distintos bike1.changecadence(50); bike1.speedup(10); bike1.changegear(2); bike1.printstates(); Invoca métodos no objecto criado bike1 bike2.changecadence(50); bike2.speedup(10); bike2.changegear(2); bike2.changecadence(40); bike2.speedup(10); bike2.changegear(3); bike2.printstates(); Invoca métodos no objecto criado bike2 cadence:50 speed:10 gear:2 cadence:40 speed:20 gear:3 Output do programa 16/24
Herança Herança: -Mecanismo que promove a reutilização da classe. -Permite que uma classe herde o estado (campos) e comportamento (métodos) de outra classe Exemplo: Superclasse Subclasses -A classe Bycicle torna-se agora a superclasse de MontainBike, RoadBike e TandemBike -As classes MontainBike, RoadBike e TandemBike são subclasses da superclasse Bycicle Definição de subclasses: (Bicicleta Dupla) class MountainBike extends Bicycle { // Colocar aqui novos campos e métodos que definam a MountainBike 17/24
Polimorfismo: Programação Avançada Polimorfismo - O polimorfismo corre quando há uma redefinição, ou múltipla definição, de métodos da superclasse nas subclasses com a mesma assinatura. - Esta característica permite que uma mesma variável (campo) se refira a objectos de classe diferentes, desde que sejam derivadas da declarada. Permite também que uma operação tenha diferentes implementações O Polimorfismo é implementado através de ligações dinâmicas (operações polifórmicas) - Só durante a execução do programa é que se sabe qual o método que é executado, pois este depende da classe do objecto e não da referência (superclasse). Razões para que uma operação não seja polifórmica. Isto é que seja final: - O programador entente que subclasses não devem fornecer métodos especializados como imlementação dessa operação. -Como recorre a ligação dinâmica é menos eficiente que operações não polifórmicas 18/24
Polimorfismo - exemplo: Mesmos métodos Pai public class Pai { public String nome() { return Pai ; superclasse Superclasse (mais geral) public class Filho extends Pai { public String nome() { return Filho ; subclasse Subclasse Filho public void mostra() { Pai pai = (Pai)this; System.out.println( this.nome() = + this.nome()); System.out.println( pai.nome() = + pai.nome()); System.out.println( super.nome() = + super.nome()); Output do programa this.nome() = Filho pai.nome() = Filho super.nome() = Pai 19/24
Interfaces Interfaces: Exemplo: -Como referido, os métodos de uma classe formam o seu interface com o mundo exterior. -A implementação do interface permite uma formalização do comportamento que promete providenciar -Um interface é um conjunto de protótipos de métodos (sem implementações) que especifica um serviço bem definido. O interface pode herdar definições de outra interface, mas não pode ser instanciado. -O comportamento da bicicleta se for especificado como um interface fica assim: interface Bicycle { void changecadence(int newvalue); void changegear(int newvalue); void speedup(int increment); void applybrakes(int decrement); -A implementação duma interface é realizada pela classe concreta através da keyword implements class ACMEBicycle implements Bicycle { // restante da classe implementado como anteriormente 20/24
Packages Pacotes (Packages): Exemplo: -Agrupam classes e interfaces relacionadas num mesmo pacote que depois pode ser disponibilizado num ficheiro.jar, juntamente com o MANIFEST.MF a descrever o pacote. -Criam um espaço de nomes que evita conflitos entre tipos definidos fora do pacote - O nome de um pacote indica a estrutura de directorias onde as classes estão posicionadas -Um pacote deve estar posicionado numa directoria com o mesmo nome -Os ficheiros relativos á classe pública Bycicle pertencente ao pacote veiculos.velocipedes devem estar posicionados em: $CLASSPATH\veiculos\velocipedes\Bycicle.java (Código fonte para compilação) $CLASSPATH\veiculos\velocipedes\Bycicle.class (Código bytecodes para execussão) 21/24
Pacotes (Packages). Exemplo: Em pt\ensino\aulas\nota.java package pt.ensino.aulas; class Nota { Criação do Pacote Em pt\musica\composicao\nota.java package pt.musica.composicao; class Nota { private Aluno lista[]; private Nota nota[]; Nomes iguais, mas classes diferentes. Espaço de nomes diferentes Utilização do pacote Usar pt\ensino\aulas\nota.java: import pt.ensino.aulas.nota; Nota Aulas = new Nota(); Utilização do Pacote Usar \pt\musica\composicao\*.java import pt.musica.composicao.*; Nota musica = new Nota(); 22/24
Pacotes (Packages): Exemplo: -A plataforma JAVA providencia uma enorme quantidade de bibliotecas de classes (conjunto de pacotes), que podem ser utilizados pelos programadores -A biblioteca de pacotes é denominada Aplication Programming Interface ou API e inclui classes para implementação das tarefas mais comuns em programação. -O objecto String contêm o estado e comportamento de conjuntos de caracteres. -O Objectio File permite que o programador manipule um ficheiro no filesystem -Etc. A especificação completa da API de JAVA contêm a informação completa para os pacotes, classes, campos e métodos disponibilizados pela plataforma Java 6 Standard Edition. Encontra-se online em: http://java.sun.com/javase/6/docs/api/index.html 23/24
FIM 24/24