Roteiro. Interfaces de Programação de Aplicações (Application Programming Interfaces) Conceitos BásicosB. ! Definição



Documentos relacionados
EXERCÍCIOS SOBRE ORIENTAÇÃO A OBJETOS

Tópicos em Engenharia de Computação

MAPEAMENTO OBJETO RELACIONAL: UM ESTUDO DE CASO

Análise e Projeto Orientados a Objetos Aula IV Requisitos. Prof.: Bruno E. G. Gomes IFRN

UNIVERSIDADE FEDERAL DO PARANÁ UFPR Bacharelado em Ciência da Computação

Especificação do 3º Trabalho

Lógica de Programação

Orientação a Objetos

PROGRAMAÇÃO AVANÇADA -CONCEITOS DE ORIENTAÇÃO A OBJETOS. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

Engenharia de Software Sistemas Distribuídos

3.1 Definições Uma classe é a descrição de um tipo de objeto.

Aspectos técnicos do desenvolvimento baseado em componentes

Eduardo Bezerra. Editora Campus/Elsevier

Levantamento, Análise e Gestão Requisitos. Aula 12

Engenharia de Software Sistemas Distribuídos

ESTUDO DE CASO WINDOWS VISTA

Guia de Fatores de Qualidade de OO e Java

Orientação a Objetos com Java

UML: Diagrama de Casos de Uso, Diagrama de Classes

ATRIBUTOS PRIVADOS 6. ENCAPSULAMENTO MÉTODOS PRIVADOS MÉTODOS PRIVADOS

(Open System Interconnection)

Análise e Projeto Orientados por Objetos

Programação Orientada a Objetos. Encapsulamento

Sistemas Operacionais Aula 06: Threads. Ezequiel R. Zorzal

UML Aspectos de projetos em Diagramas de classes

APOO Análise e Projeto Orientado a Objetos. Requisitos

Herança. Alberto Costa Neto DComp - UFS

Tarciane Andrade.

CONVENÇÃO DE CÓDIGO JAVA

Java com Banco de Dados Posgree

MVC e Camadas - Fragmental Bliki

Padrão Arquitetura em Camadas

Documentação Usando o Javadoc

Introdução a Java. Hélder Nunes

Hardware (Nível 0) Organização. Interface de Máquina (IM) Interface Interna de Microprogramação (IIMP)

Sumário. Uma visão mais clara da UML

PROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

ARQUITETURA DO SISTEMA ERP PEGASUS

Conteúdo. Disciplina: INF Engenharia de Software. Monalessa Perini Barcellos

Conteúdo. Disciplina: INF Engenharia de Software. Monalessa Perini Barcellos. Centro Tecnológico. Universidade Federal do Espírito Santo

Sistemas Distribuídos

Sistemas Operacionais

Sistemas Distribuídos Processos I. Prof. MSc. Hugo Souza

Documento de Projeto de Sistema

Feature-Driven Development

Lista de Contas: Assinatura. Lista de Contas. Listas de Contas: Descrição. Listas de Contas: Descrição. Listas de Contas: Descrição

Java. Marcio de Carvalho Victorino

Engenharia de Requisitos

MODELAGEM VISUAL DE OBJETOS COM UML DIAGRAMA DE CLASSES.

Análise e Projeto Orientados por Objetos

Engenharia de Software III

Felipe Denis M. de Oliveira. Fonte: Alice e Carlos Rodrigo (Internet)

Governança de TI. ITIL v.2&3 parte 2

Tópicos Especiais em Redes de Telecomunicações

Resumo: Perguntas a fazer ao elaborar um projeto arquitetural

INF 2125 PROJETO DE SISTEMAS DE SOFTWARE Prof. Carlos J. P. de Lucena

Virtualização Gerencia de Redes Redes de Computadores II

Curso de PHP. FATEC - Jundiaí. A programação orientada a objetos (object-oriented oriented programming

JDBC Java Database Connectivity

Faculdades Santa Cruz - Inove. Plano de Aula Base: Livro - Distributed Systems Professor: Jean Louis de Oliveira.

ISO/IEC 12207: Gerência de Configuração

Aula 06 Introdução à Teste de Módulos II e Exercícios. Alessandro Garcia LES/DI/PUC-Rio Março 2014

LINGUAGEM C UMA INTRODUÇÃO

Programação Estruturada e Orientada a Objetos. Fundamentos Orientação a Objetos

Linguagem de Programação III

Tópicos em Engenharia de Software (Optativa III) AULA 2. Prof. Andrêza Leite (81 )

3 Um Framework Orientado a Aspectos para Monitoramento e Análise de Processos de Negócio

DESENVOLVENDO APLICAÇÃO UTILIZANDO JAVA SERVER FACES

Prof. Raul Sidnei Wazlawick UFSC-CTC-INE. Fonte: Análise e Projeto de Sistemas de Informação Orientados a Objetos, 2ª Edição, Elsevier, 2010.

2 Diagrama de Caso de Uso

Capítulo 4. Packages e interfaces

Ferramenta de apoio a gerência de configuração de software. Aluno: Rodrigo Furlaneto Orientador: Everaldo Artur Grahl

Desenvolvimento Web TCC Turma A-1

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

Padrão Básico de Projeto: Interfaces e Polimorfismo

Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 03 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO)

Mapas e Localização. Programação de Dispositivos Móveis. Mauro Lopes Carvalho Silva

Objetivos: Sun recomenda que utilize o nome de domínio da Internet da empresa, para garantir um nome de pacote único

Manipulação de Banco de Dados com Java. Ms. Bruno Crestani Calegaro Maio/ 2015

Tecnologia PCI express. Introdução. Tecnologia PCI Express

ARCO - Associação Recreativa dos Correios. Sistema para Gerenciamento de Associações Recreativas Plano de Desenvolvimento de Software Versão <1.

Diagrama de Classes. Um diagrama de classes descreve a visão estática do sistema em termos de classes e relacionamentos entre as classes.

Programação de Computadores II TCC Turma A-1

Curso de Java. Orientação a objetos e a Linguagem JAVA. TodososdireitosreservadosKlais

Projeto de Arquitetura

Introdução à Linguagem Java

Revisão: Introdução. - Integração com o AutoManager; 1 Atualização de versão do banco de dados PostgreSQL

Manual do usuário. Softcall Java. versão 1.0.5

ARQUITETURA DE SISTEMAS. Cleviton Monteiro

Sobre o Professor Dr. Sylvio Barbon Junior

Linguagem de Programação JAVA. Professora Michelle Nery Nomeclaturas

NOVIDADES DO JAVA PARA PROGRAMADORES C

Programação Orientada a Objetos Prof. Rone Ilídio UFSJ/CAP

Prática da Disciplina de Sistemas Distribuídos Serviços Web IFMA DAI Professor Mauro Lopes C. Silva

Gerenciamento de Requisitos

MÓDULO 9 METODOLOGIAS DE DESENVOLVIMENTO DE SISTEMAS

Redes de Computadores

Transcrição:

Roteiro Interfaces de Programação de Aplicações (Application Programming Interfaces) Cleidson R. B. Souza Departamento de Informática Universidade Federal do Pará! Definição! Vantagens! Exemplos! Utilização na Indústria! Considerações de Projeto! Evolução Conceitos BásicosB! Modularidade: a divisão de um sistema em partes para que possamos tratar estas partes isoladamente. Um mecanismo para lidar com a complexidade no desenvolvimento de produtos, não apenas software. Um sistema deve ser dividido em módulos para facilitar sua construção! Parnas* propôs o princípio de ocultamento da informação como um critério indicando como os módulos devem ser separados. Parnas, D. L. (1972). "On the Criteria to be Used in Decomposing Systems into Modules." Communications of the ACM 15(12): 1053-1058. Conceitos BásicosB! Módulos não devem expor as suas partes que podem mudar, seus detalhes de implementação, para que eles não afetem seus clientes.! Encapsulamento: O código cliente pode usar apenas a interface para a operação. A implementação do objeto pode mudar, para corrigir erros, aumentar performance, etc sem que seja necessário modificar o código do cliente. A manutenção é mais fácil e menos custosa. Cria um programa legível e bem estruturado

APIs! Uma interface de programação de aplicações (em inglês API) é definida pelo Software Engineering Institute como: API é uma tecnologia que facilita a troca de mensagens our dados entre duas ou mais aplicações. Uma API é uma interface virtual entre duas funções do software como um processador e uma planilha Uma API é o software que é usado a suportar a integração de vários produtos de software off-theshelf ou aplicações recém-desenvolvidas com aplicações novas ou existentes. APIs! Na prática, uma API significa ou indica uma interface bem-definida que define um conjunto de serviços que um componente, módulo, ou aplicação fornece a outros elementos de software.! des Rivieres: Uma API é uma interface bem-definida que permite que um componente de software acesse através de seu código outro componente, e isto é suportado pela linguagem de programação. APIs! A palavra interface é usada em APIs para explicitamente indicar que esta é uma construção que existe entre dois mundos : Interface com o usuário; Interface de programação de aplicações;! No caso de APIs,, os mundos são dois elementos de software (componentes, classes, módulos) ou até mesmo duas aplicações. Exemplos de APIs! Sistemas Operacionais: Win32 Mac OS J2SE! IDEs Eclipse NetBeans! APIs bem projetadas são s duradouras;! Elas não quebram os clientes existentes - evolução com compatibilidade;! Elas deixam o código binário continuar funcionando - compatibilidade binária;

APIs em Java! Não confundir APIs com o conceito de interfaces em Java!! Tipicamente, em uma linguagem como Java, uma API corresponde a um conjunto de: classes + interfaces + métodos públicos + a documentação associada. APIs na indústria! APIs são adotadas pela indústria porque elas suportam a separação entre a interface e a implementação de componentes.! Pode-se separar elementos de software entre uma parte pública (a API) e a parte privada (a implementação), de tal maneira que mudanças na parte privada podem ser feitas sem afetar a parte públic,, consequentemente diminuindo a dependência (acoplamento, coupling) ) entre as o usuário da API e a API. APIs na indústria! APIs e interfaces também facilitam a coordenação das atividades dos engenheiros de software. Se dois engenheiros (João e Maria) concordam na API que integra seus components, eles podem trabalhar em paralelo. João não precisa saber dos detalhes do componente que Maria está implementando e vice-versa, desde que os dois honrem o que foi definido na API. Mas, para que isso aconteça! APIs entre amigos (dentro de uma mesma empresa) Não existem clientes externos Não precisa ser estável entre duas releases Erros podem ser corrigidos! APIs que se tornam públicasp Precisam ser estáveis porque suportam um enorme número de clientes! A API do Lotus Notes tem 8.000 clientes! Quando uma API é publicada, não há como voltar atrás Mudanças que quebram a API são uma péssima política Em caso de mudanças na próxima versão,, deve-se extender a API

Projeto de APIs - Considerações! É necessário Informar os clientes de como usar a API API specs Escolher nomes de métodos m e classes informativos Decidir cuidadosamente entre usar classes ou interfaces! Quando uma API é publicada Ela tem de trabalhar de acordo com a estrutura que ela propôs É necessário melhorar a API sem quebrar os clientes existentes! API specs mal projetadas Confundem os clientes E quando consertadas podem piorar as coisas Projeto de APIs - Considerações! Tem de existir uma fronteira clara entre o que é parte e o que não é parte da API Exemplo: no Eclipse packages que não n são da API tem o nome internal : org.eclipse.ui ui.internalinternal! Não deve haver conexão visível entre a API e a implementação da mesma Detalhes de implementação não devem existir na API Evolução de APIs! APIs naturalmente vão v evoluir a cada nova versão Changes to API could invalidate existing clients! A evolução tem de ser feita de maneira compatível Mantenha os clientes funcionando; A API deve fornecer os mesmos serviços;! Duas considerações gerais Compatibilidade no contrato honre o contrato das APIs existentes Compatibilidade binária - o código tem de continuar funcionando; Compatibilidade no contrato! Antes /** Returna uma lista não-vazia.. */ public int[] getindices();! Depois /** Returna uma lista. Esta lista PODE ser vazia.*/ public int[] getindices();! Poderia quebrar clientes int[] d = getindices(); System.print(d[0]); // array index out of bounds! Mas,, se minha implementação faz: public int[] getindices() { ;; return result; // resultado não é vazio }

Compatibilidade binária! Antes public void register(string key);! Depois public void register(object key);! As chamadas existentes recompilam sem erro register( foo foo );! Mas, o código c compilado existente indicará erro register( foo foo ); // link error Porquê? Como quebrar a compatibilidade binária?! Renomear um pacote, classe, método m ou atributo;! Remover um pacote, classe,, método m ou atributo;! Diminuir a visibilidade (de public para private);! Adicionar ou remover parâmetros;! Mudar o tipo de um parâmetro;! Mudar o tipo de retorno de um método; m! Adicionar ou remover exceções de um método;! Mudar o tipo de um atributo;! Mudar o valor de uma constante; Como quebrar a compatibilidade binária?! Mude um método m de um objeto para um método da classe (ver conceito de meta-classe);! Mude um atributo de um objeto para um atributo da classe (ver( conceito de meta-classe);! Mude uma classe para uma interface ou vice- versa;! Faça uma classe final,, se os clientes podem criar subclasses dela;! Faça uma classe abstract,, se os clientes podem criar instâncias dela; Como manter a compatibilidade binária?! Adicionar packages,, classes, e interfaces;! Modificar a implementação de um método;! Modificar elementos que não n pertencem a API;! Adicionar atributos as classes e interfaces;! Adicionar métodos abstract as classes (se os clientes não criam subclasses);! Adicionar métodos as interfaces (se os clientes não implementam as interfaces);! Adicionar métodos m não abstract as classes (se os clientes herdam destas classes);! Mudar o valor de um atributo se ele não n é constante;

Como manter a compatibilidade binária?! Mover um método m de uma classe para sua superclasse;! Tornar uma classe final em não-final;! Tornar uma classe abstract em concreta;! Mudar o nome de um parâmetro em um método; Substituindo Métodos M em uma API! Adicione o novo método na API;! Torne o método original deprecate Faça um forward do método velho para o novo; Mas, você ê tem de garantir que o método original continua funcionando package org.eclipse.jdt.core.dom; public class Message { /** * @deprecated Use getstartposition() instead */ public int getsourceposition() { return getstartposition(); // forward method } public int getstartposition() { } } Referências! http://openide.netbeans.org/nonav/tutorial/api- design.html! http://www.eclipse.org/eclipse/development/java- api-evolution.html! How to Use the Eclipse API, h t t p : / / w w w. e c l i p s e. o r g / a r t i c l e s / A r t i c l e - API%20use/eclipse-api-usage-rules.html! Requirements for Writing Java API Specifications http://java.sun.com/products/jdk/javadoc/writing apispecs/index.html

Times! Análise e Interfaces alline lemos alline peixoto leandro luiz otavio paula danielle priscila! Arquitetos adailton anderson marcelo marcio braga rafael weverton! Implementação Cleberson Dedier Diego Leonardo Marcio Kuroki Marlos Tacio! Teste aline patricia billy breno franklin harrison joseane luiz alberto pedro leandro Responsabilidades dos Times! Time 1 - Análise e Interfaces Responsável por TODAS as comunicações com o cliente! Especificação de requisitos! Use-Cases! Diagrama de transição de estados da interfaces! Usuário (fictício) típico: nome, idade, escolaridade, etc. Manual da ferramenta.! Time 2 - Arquitetos Arquitetura em Camadas da Aplicação APIs para cada camada! Diagramas de Classes, Arquitetura, etc.! Código fonte conforme discutido anteriormente; Responsabilidades dos Times! Time 3 - Implementação Código Java; Documentação em Javadoc; Terá auxílio do time de arquitetos;! Time 4 - Testes Gerência de configuração; Testes unitários para cada camada; Testes de integração do sistema;! Precisa popular um banco de dados para efetuar os testes; Observações! Cada time precisa eleger um gerente.! A única exceção é o time dos arquitetos: Adailton é o gerente. Dez minutos para vocês decidirem!

Observações! Cada time precisa definir as responsabilidades de cada integrante. Por exemplo: Analistas: quem irá contactar o cliente? Arquitetos: quem usará a ferramenta Rose para os diagramas? Implementação: quem instalará o banco de dados SPRING ou a ferramenta TerraLib?? Configuração do servidor CVS? Testes: quem instalará o banco de dados SPRING ou a ferramenta TerraLib? Apresentações! Time 1 - Analistas: Especificação de requisitos: 7 de fevereiro; Especificação da interface com usuário: 21 de fevereiro; Manual do Usuário: 04 de Abril! Time 2 - Arquitetos: Arquitetura: 21 de fevereiro;! Time 3 - Implementação Demonstração da ferramenta ANTES dos testes Primeira Parte: 07 de Março, 21 de Março e 04 de Abril;! Time 4 - Testes Testes Unitários: 07 de Março; Relatório de Testes Unitários: 14 de Março;! Apresentação para o Cliente 11 de Abril de 2006. Datas aproximadas! Em resumo, na próxima aula.! Professor: informações de como contactar o cliente.! Alunos: Reunião para distribuição de atividades; Preparação de uma planilha inicial com a descrição das atividades de cada integrante; Planilha deve ser entregue na aula seguinte.! Recomendação: Todos os times devem estudar aspectos da ferramenta SPRING e TerraLib. Cada time deve estudar aspectos relacionados.! Início da Aula as 3 da tarde. Perguntas?

Observações! Atraso na entrega e/ ou apresentação do trabalho implica no desconto de 1 pt por dia útil na pontuação o total do time