Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes [email protected] Aula 01 - Conceitos da Orientação a Objetos http://www.ufpa.br/sampaio/bd2003/lpoo Marco Fagundes 1 de 25 Roteiro Apresentação Qualidade de Software Paradigmas de Programação Conceitos da Orientação a Objetos Programação Orientada a Objetos Java e Delphi 2 de 25 Apresentação Objetivo Geral do Curso Motivar, apresentar e exercitar o uso de estilos de programação orientados a objetos a fim de se obter software de qualidade Objetivos Específicos do Curso Discutir aspectos de qualidade e modularidade de software Introduzir conceitos de POO Empregar conceitos OO em Java e Delphi Fornecer diretrizes para a construção e estruturação de programas em Java e Delphi Utilizar ambientes de programação em Java e Delphi Desenvolver uma aplicação de médio porte 3 de 25 Apresentação Relevância e Expectativas Estudar os conceitos de orientação a objetos e sua utilização no desenvolvimento de sistemas de software Empregar na prática os conceitos OO Consolidar conceitos como abstração de dados, modularidade e reusabilidade Capacitar o aluno no desenvolvimento de software de qualidade No final do curso o aluno estará apto a participar na implementação de sistemas orientados a objetos usando Java ou Delphi 4 de 25 Apresentação Relação com outras Disciplinas Análise e Projeto de Sistemas Modelo de Análse/Projeto LPOO Sistema Implementado em Java ou Delphi Banco de Dados Projeto/Construção do Banco de Dados 5 de 25 Apresentação Estrutura do Curso O curso é composto por aulas teóricas e práticas. A estratégia adotada é que a cada duas aulas teóricas será efetuada uma aula prática no laboratórico O curso é composto por três módulos: • Módulo Fundamentos (12 aulas) • Módulo Avançado (11 aulas) • Módulo Cliente/Servidor (17 aulas) Módulo Fundamentos • Objetivo: Apresentar conceitos básicos e avançados da orientação a objetos, os ambientes Java e Delphi e sua utilização no desenvolvimento de GUIs • Meta: Desenvolver uma aplicação (Java ou Delphi) com uma GUI oferecendo as operações básicas de cadastro (incluir, excluir, alterar e consultar) utilizando uma estrutura de dados 6 de 25 Apresentação Estrutura do Curso Módulo Avançado • Objetivo: Apresentar conceitos técnicas para o reuso de código através da herança de classes e recursos para o desenvolvimento de aplicações robustas • Meta: Estender a aplicação desenvolvida no módulo de fundamentos adicionando reuso de código e robustez Módulo Técnicas Cliente/Servidor • Objetivo: Apresentar os recursos e tecnologias utilizados na conexão da aplicação com Banco de Dados no Java (JDBC) e no Delphi (BDE) • Meta: Estender a aplicação desenvolvida no módulo avançado adicionando persistência dos objeto em um Banco de dados 7 de 25 Apresentação Cronograma 8 de 25 Apresentação Cronograma 9 de 25 Apresentação Cronograma 10 de 25 Apresentação Metodologia de Ensino A ênfase do curso é em conceitos e técnicas Java e Delphi serão utilizados como ferramenta prática de apoio • Para ilustrar o paradigma OO • Construir Aplicações OO Os conceitos estudados serão sedimentados através da implementação incremental de um projeto a ser realizado durante o curso 11 de 25 Apresentação Metodologia de Trabalho O sistema a ser considerado para estudo no curso é um subconjunto de um sistema de controle acadêmico desenvolvido na UFPE O escopo considerado envolve a funcionalidade de criação de turmas A idéia é fornecer um diagrama de classes UML a partir do qual será gerada uma implementação Com pone nte Curricular Doce nte cpfDoce nte : String codigoDoce nte : Inte ge r nom e Doce nte : String re gim e Doce nte : String tipoDoce nte : TipoDoce nte (colecaoDocentesCandidatos) Especificar Atividade Acadêmica Turma 1..n Docent e Candi dato dataHabilitação : Date codi goCom pone nt e Curricular : I nte ge r nome Co mpone nte Curri cul ar : String formaAv ali aca o : St ri ng cargaHorariaMini ma Aprov e it ame nto : Inte ge r sit uaca o : St ri ng dataPropos ta : Da te dataI mpl ant acao : Date Pe riodoLe tivo componenteCorrespondente (colecaoDocentesMinistrantes) <<include>> Coordenador Criar Turmas e Subturmas periodoOferecimento 1 codigoAtividade Acade m ica : Inte ge r situacaoAtividade : String atividadeAcademicaMinistrada Chefe de Departam ento 1..n <<i nclude>> 1 turnoTurma Turm a HorarioPadrao codigoHorario : Inte ge r diaSe m anaHorario : String horaInicio : Date horaFim : Date Especificar Docentes Ministrantes 1 Atividade Acade m ica Docen te Ministrante cargaHoraria : Inte ge r (colecaoHorariosTurma) HorarioTurm a codigoHorarioTurm a : Inte ge r 1 sala Sala codigoSala : Inte ge r de scricaoSala : String capacidade Sala : Inte ge r tipoSala : TipoSala pre dio : Pre dio codigoPe riodoLe tivo : Inte ge r anoPe riodoLe tivo : Inte ge r se m e stre Pe riodoLe tivo : Inte ge r tipoPe riodoLe tivo : String dataInicio : Date dataFim : Date Turno codigoTurno : Inte ge r nom e Turno : String horaInicio : Date horaFim : Date duracaoHoraAula : Inte ge r 1 codi goTurma : Int e ge r nature zaT urm a : Bool ean 0..1 1..n ide ntifi cacao : St ri ng nume roAul as : Inte ge r cargaHora riaTurm a : I nte ge r situacaoTurm a : String qntde Total Vagas : Int e ger 1 turmaSuperior tipoTurm a TipoTurm a codi goTi poTurm a : Inte ge r d e scricaoTi poTurma : String 12 de 25 Apresentação Metodologia de Trabalho A aplicação será desenvolvida incrementalmente a cada módulo do curso A aplicação a ser desenvolvida será avaliada segundo emprego do paradigma OO, estruturação, reusabilidade e robustez A meta é capacitar o aluno a desenvolver a aplicação segundo estrutura abaixo 13 de 25 Apresentação Avaliação 1 projeto em equipe (de até 3 pessoas) a ser entregue em dois estágio. • No final do Módulo de Avançado (20% da média final) • No final do Módulo de Técnicas (35% da média final) Três exames escritos explorando aspectos conceituais e de implementação das construções de Java e Delphi. Cada exame será realizado no final de cada módulo e valem 10% da média final Três exercícios práticos/teóricos individuais/grupo. Cada exercício será efetuado na fase intermediária de cada módulo e terá o valor de 5% da média final 14 de 25 Apresentação Bibliografia(principais) Livros (Java): Harvey M. Deitel and Paul J. Deitel. Java: Como Programar. Terceira edição, Bookman, 2000. (Livro texto do curso; exemplos do livro e referências adicionais em http://www.deitel.com/) Bruce Eckel. Thinking in Java. Terceira Edição, 2002. (Disponível em HTML, no formato PDF, e em HTML de forma compactada) Livro (Delphi): Marco Cantu. Dominando o Delphi 5 - A Bíblia. Makron, 2000. Referências na Internet... 15 de 25 Qualidade de Software A Crise do Software (Problemas e Causas) Qualidade de software é um conjunto de propriedades a serem satisfeitas em um determinado grau, de modo que o software satisfaça às necessidades de seus usuários Atributos de qualidade: Corretude, Eficiência, Manutenibilidade Portabilidade, Reusabilidade, Robustez, Extensibilidade, Integridade e Usabilidade Os fatores extensibilidade e reusabilidade estão diretamente relacionados à manutenção de sistemas. Estima-se que 70% do custo de software corresponde à manutenção Clareza versus Eficiência Pensamento a longo prazo e desenvolvimento disciplinado, ao invés de resultados imediatos e de qualquer jeito Software tem que ser adaptável, flexível, fácil de manter (custos e tempo reduzidos de desenvolvimento e manutenção) 16 de 25 Paradigmas de Programação O que é Paradigma de Programação? • Modelo, padrão ou estilo de programação suportado por linguagens que agrupam certas características comuns Paradigma Imperativo • Programas centrados no conceito de um estado (modelado por variáveis) e ações (comandos) que manipulam o estado • Paradigma também denominado de procedural, por incluir subrotinas ou procedimentos como mecanismo de estruturação • Primeiro paradigma a surgir e ainda é o dominante Paradigma Orientado a Objetos • Não é um paradigma no sentido estrito: é uma subclassificacão do imperativo • A diferença é mais de metodologia quanto à concepção e modelagem do sistema • A grosso modo, uma aplicação é estruturada em módulos (classes) que agrupam um estado e operações (métodos) sobre este 17 de 25 Paradigmas de Programação Paradigma Funcional • Programas são funções que descrevem uma relação explícita e precisa entre E/S • Estilo declarativo: não há o conceito de estado nem comandos como atribuição • Conceitos sofisticados como polimorfismo, funções de alta ordem e avaliação sob demanda • Aplicação: IA Paradigma Lógico • • • • Programas são relações entre E/S Estilo declarativo, como no paradigma funcional Na prática, inclui características imperativas, por questão de eficiência Aplicações: SGBD 18 de 25 Conceitos da Orientação a Objetos Administração da Complexidade • Abstração (dados e procedimentos): Deter em elementos relevantes • Encapsulamento: Separar aspectos externos dos detalhes internos • Modularidade: Módulos coesos e fracamente acoplados • Herança: Compartilhamento de propriedades e comportamento Conceitos Básicos • Objetos: Elemento que desempenha um papel específico • Classes e Instâncias: Classe descreve um conjunto de objetos com mesmos atributos/operações/relações/semântica • Mecanismos de Estruturação: Ligações e Associações / Composição e Agregação / Herança • Métodos e Mensagens: Métodos implementam operações e Mensagens são usadas para ativar métodos • Persistência: Transcender o tempo/espaço 19 de 25 Conceitos da Orientação a Objetos Conceitos Avançados • Classes e Operações Abstratas: Classes abstratas organizam características comuns a diversas classes. Operações abstratas possuem múltiplas implementações • Polimorfismo: Um objeto emissor de uma mensagem não precisa conhecer a classe do objeto receptor. As operações possuem a mesma assinatura e semântica • Sobrecarga: As operações não têm necessariamente a mesma semântica e nem precisam conservar sua assinatura • Ligação Dinâmica: A mensagem somente é associada ao método específico da classe do objeto receptor no momento em que é enviada 20 de 25 Conceitos da Orientação a Objetos Resumo Conceitos Básicos Administração de Complexidade Abstração Encapsulamento Modularidade Herança Objetos Mecanismos de Estruturação Persistênci a Classe e Instâncias Métodos e Mensagen s Conceitos Avançados Classes e Operações Abstratas Ligação Dinâmica Polimorfism o Sobrecarg a Para uma linguagem ser considerada OO, ela precisa implementar 4 conceitos: •Abstração •Encapsulamento •Herança •Polimorfismo. 21 de 25 Análise, Projeto e Programação OO Na Análise OO o objetivo é desenvolver um modelo OO do domínio da aplicação. Os objetos identificados podem ou não podem ser mapeados diretamente em objetos do sistema No Projeto OO o objetivo é desenvolver um modelo OO de um sistema de software para implementar os requisitos identificados. Estes requisitos podem ou não ser estruturados em objetos no domínio do problema Na Programação OO o objetivo é realizar um projeto de software usando uma linguagem de programação OO. Uma linguagem de programação OO suporta diretamente a implementação de objetos e fornece classes e herança 22 de 25 Unified Modeling Language A UML é uma linguagem padrão para especificar, visualizar, documentar e construir artefatos de um sistema e pode ser utilizada ao longo de todo o ciclo de desenvolvimento e através de diferente tecnologias de implementação Será citada a utilização do diagrama de classes Uma classe UML apresenta a seguinte representação gráfica: Implementação em Java public class Sala{ int codigoSala; Nome da Classe (obrigatório) public void consultarSalas(){...} } Atributos da Classe (opcional) Implementação em Delphi Operações da Classe (opcional) type TSala = class private codigoSala: integer; public procedure consultarSala; 23 de 25 Programação Orientada a Objetos A Programação Orientada a Objetos (Object-Oriented Programing) foi concebida no início da década de 70 Estruturação do programa é baseada nos dados e não nas funções As funções mudam com mais frequência do que os dados Linguagens OO • A orientação a objetos pode ser praticada em uma linguagem imperativa tal como C ou Pascal. Entretanto, as regras de escopo não prevenirão dos acessos impróprios a um objeto a partir de outro módulo, ficando sob a responsabilidade do programador • Formalmente, para ser considerada uma linguagem OO, esta precisa implementar quatro conceitos importantes: abstração, encapsulamento, herança e polimorfismo 24 de 25