Programação Web Orientada a Objetos Professor: Charles Jefferson Plano de Ensino Unidade Curricular: Programação Web Orientada a Objeto Carga Horária: 120 Horas Curso: Informática para Internet Modalidade: Técnico Subsequente PROFESSOR: Charles Jefferson R. Alves e Alves Objetivo Capacitar o aluno, de forma que seja capaz de compreender e implementar os fundamentos da Programação Orientada a Objetos, bem como interpretar artefatos de projeto, mapeando-os através da implementação no computador. Analisar e projetar Sistemas Web baseado em objetos. Implementar pequenas aplicações com interface gráfica utilizando objetos já definidos no ambiente de desenvolvimento. Habilidades Aplicar os conceitos básicos de Orientação a Objetos. Identificar as propriedades e as responsabilidades dos objetos. Desenvolver sistemas Web, utilizando Orientação a Objetos baseados em componentes. Realizar a conexão com interface e base de dados; Avaliar resultados de testes dos programas desenvolvidos; Interpretar e analisar o resultado da modelagem de dados; Estruturar algoritmos de permitam a representar regras de negócios; Desenvolver aplicações Web em camadas. Conteúdo Programático Histórico da Programação Orientada a Objetos Conceitos de Classe, Objeto, Herança, Polimorfismo, Abstração,Generalizações, Superclasse e Subclasse. Construtores e Destrutores. Aplicações dos conceitos utilizando uma linguagem PHP. Confecção e interpretação de diagramas UML. Conceitos de Padrões de Projetos e Utilização do padrão MVC. Funções avançadas. Desevolvimento de um sistema web comercial Metodologia Aulas expositivas dialogadas e interativas Pesquisas e debates informais Trabalho em grupo e individual Aula prática no laboratório Avaliação Presença e participação nas atividades em sala de aula – 1,0 ponto. Apresentação de trabalhos – 9,0 pontos Prova individual – 10,0 pontos. Pré-requisitos Lógica de Programação Contrução de Algorítmos HTML Modelagem UML Linguagem Orientada a Objetos: JAVA, C++, C#, VB.NET, PHP5 Noções básicas de Inglês Bibliografia PHP: Programando com Orientação a Objetos ISBN: 978-85-7522-137-2 (1ed) ISBN: 978-85-7522-200-3 (2ed) Páginas: 574 Autor: Pablo Dall'Oglio POO – Histórico Com os problemas gerados pela crise de softares, surge a Engenharia de Sofware (60). Porém, as várias técnicas desenvolvidas nos anos 70 e 80 não resolveram o problema de produtividade e qualidade nos softwares. Lições da década de 80 Requisitos do usuário são mais importantes Funções e dados tem grande importância, porém não podem estar separados POO – Histórico Realidade atual: Sistemas de alta complexidade Ferramentas de desenvolvimento drasticamente diferentes de 20 anos atrás. Sistemas maiores, mais complexos e mais voláteis. A mudança para alcançar a qualidade e produtividade está na REUTILIZAÇÃO. POO – Técnicas de Programação Programação Não-Estruturada Programação Procedimental (ou Procedural) Programação Estruturada (ou Modular) Programação Orientada à Objetos Programação Não-Estruturada Programas simples e pequenos consistindo de apenas um programa principal. – Ex. Cartão “Programa” é uma seqüência de comandos ou instruções que modificam dados “globais” durante toda a sua execução. Como melhorar este modelo de programação ? – Extração de seqüências (procedures) Programação Procedimental (Procedural) Um programa é visto como uma seqüência de procedimentos que se “comunicam” através de dados locais, denominados parâmetros. O fluxo destes dados pode ser ilustrado como um grafo hierárquico ou uma árvore. Um único programa que é dividido em pequenas partes, chamadas “procedures”. Para permitir o uso de procedimentos genéricos ou grupo de procedimentos em outros programas, precisamos separá-los e disponibilizá-los. Programação Estruturada (Modular) Um programa não consiste mais de uma única parte em um único arquivo. É agora dividido em várias pequenas partes chamados módulos, que interagem, através de chamadas aos procedimentos, formando o programa. Entretanto, só existe um estrutura por módulo e cada módulo só pode existir uma única vez no programa. Problema: E para se manipular mais de uma lista ?!? Programação Estruturada (Modular) Os códigos se interligam por meio de 3 mecanismos: Programação Orientada a Objetos Na Orientação a Objetos, a estrutura é organizada pelos dados. Escolhe-se a representação dos dados que melhor se adequam aos requisitos do problema. Consequentemente, os programas ficam estruturados pelos dados e não mais pelas operações. Isto significa que os dados apenas especificarão operações válidas. Agora os módulos serão agrupados por dados e suas representações, denominadas classes. Programação Orientada a Objetos Cada objeto “implementa”seus próprios módulos e dados, permitindo que várias estruturas coexistam. Cada objeto é responsável por inicializar e destruir os seus dados. Consequentemente, não existe mais a necessidade de explicitar uma chamada aos procedimentos de criação e destruição. Todo objeto possui as seguintes características: Estado: conjunto de propriedades de um objeto (valores dos atributos). Comportamento: conjunto de ações possíveis sobre o objeto (métodos da classe). Unicidade: todo objeto é único (possui um endereço de memória). POO – Objetivos Produção de software mais confiável Proteção aos dados: encapsulamento Aumento da produtividade de software Reutilização de código: classes Extensão da biblioteca de classes: definição de subclasses (herança) implementação de novos métodos redefinição de métodos (polimorfismo) POO – Regras de Desenvolvimento Decomposição A partir de um problema geral, definir um conjunto de subproblemas independentes que podem ser tratados em separado. Independência A alteração de um módulo não incorre na modificação de outros módulos. Reutilização Quanto mais um módulo for independente, maior a chance dele poder ser reutilizado em outra aplicação. Auto documentado Todo módulo deve ser compreensível sem a necessidade de verificar seu relacionamento com os outros módulos. POO A orientação a objetos pode ser resumido como um estilo de desenvolvimento baseado no conceito de objetos. Em uma linguagem puramente orientada a objetos todas as representações são realizadas por objetos. Os objetos combinam dados e funções. A orientação a objetos pode ser aplicada: Análise; Projeto; Implementação de um sistema. Por que Orientação a Objetos? Aumento de Produtividade Ganho de Qualidade Ganho de Confiabilidade Conhecimento adquirido podendo ser compartilhado Manutenibilidade Custos Programação Estruturada Pontos Positivos: É fácil de entender Ainda muito usada em cursos introdutórios de programação Pontos Negativos: Baixa reutilização de código Códigos confusos: Dados “misturados” com comportamento Programação Orientada a Objetos Pontos Positivos: Melhor organização do código Bom reaproveitamento de código Pontos Negativos: Desempenho mais baixo que o paradigma estruturado Exige um maior grau de abstração Programação Estruturada x POO Programação Orientada a Objetos A Programação Orientada a Objetos (POO) é uma técnica de programação que usa conceitos de Objetos e Classes como elementos centrais para representar e processar dados usados nos programas. POO Mensagens Um programa é encarado como um conjunto de objetos que interagem entre si, através de mensagens. Objeto3 Objeto5 Objeto1 Objeto2 Objeto4 Objetos Objetos são usados para representar entidades (coisas) do mundo real ou computacional. Concreto Cão, Moto, Pessoa... Abstrato Conta bancária, Música... Atributos e Métodos Atributos e Métodos - Atividade Identifique 2 objetos ao seu redor e descreva pelo menos 3 características e 2 comportamentos de cada um deles. Classes Conjunto de objetos que possuem características (atributos) e comportamentos (métodos) comuns. Cada classe funciona como um molde para a criação de objetos. Os objetos são representações concretas (instâncias) de uma classe. Classes Conjunto de objetos que possuem características (atributos) e comportamentos (métodos) comuns. Cada classe funciona como um molde para a criação de objetos. Os objetos são representações concretas (instâncias) de uma classe. Classes Exemplo de Classes Entidades da Aplicação: Pessoa, conta, cliente, fornecedor... Entidades de Interface: Janela, botão, painel, frame, barra... Entidades Diversas: Conexão com o banco de dados, um arquivotexto, um arquivo XML, uma conexão SSH, uma conexão FTP, um Web Service... Representação Gráfica da Classe em UML Nome da Classe + Atributo 1 + Atributo 2 + Atributo 3 Atributos (Caracterísiticas) + Metodo1 ( ) + Metodo2 (Valor1) + Metodo3 (Valor1,Valor2) Métodos (Comportamento) Classe Pessoa Representação gráfica da classe pessoa conforme o padrão UML: Pessoa + Codigo + Nome + Altura + Idade + Nascimento + Escolaridade + Salario + Crescer(centimetros) + Formar(titulo) + Envelhecer(anos) Classe e Objeto Representação de 1 objeto da classe pessoa conforme o padrão UML: Pessoa + Codigo = 10 + Nome = Carlos da Silva + Altura = 1,85 + Idade = 25 + Nascimento = 10/04/1976 + Escolaridade = Ensino Médio +Salario = R$ 700,00 +Crescer(centimetros) +Formar(ttulo) +Envelhecer(anos) Pacote Pacote é um envoltório de classes, ou seja, guarda classes e outros pacotes logicamente semelhantes ao pacote que os contém. Podemos visualizar os pacotes como diretórios ou pastas, nos quais podemos guardar arquivos (classes) e outros diretórios (pacotes) que tenham conteúdo relacionado com o pacote que os contém. Resumo Aprendemos o que é POO. Conhecemos os conceitos de Classes, Objetos, Atributos, Métodos, Pacotes e Mensagens. Começamos a observar o mundo a nossa volta sob o ponto de vista da Programação Orientada a Objetos. PHP Orientado a Objetos A partir da versão 5, a orientação à objetos do PHP ficou praticamente completa, não deixando nada a desejar com relação as linguagens de programação voltadas para desktop. Dentre as funcionalidades que ela suporta, podemos citar Sobrescrita de função, Sobrecarga de função, Herança, Polimorfismo e Interfaces. Assim como no Java, PHP OO não suporta herança múltipla. A solução que os programadores fazem para compensar isso é a utilização de interfaces. PHP Orientado a Ojetos A orientação à objeto do PHP que será trabalhada, será: Criação de classe Atributos Métodos construtor Encapsulamento Modificadores de acesso (Private, Public, Protected) Métodos Set Métodos Get Criação de objetos Chamada de métodos Herança Criação de Classes Exemplo de criação de classe usuário class Usuario { //atributos da função //métodos da função ... ... } Criação de Atributos Exemplo de criação de atributos da classe usuário class Usuario { } $idusuario; //atributo $nome; //atributo $login; //atributo $senha; //atributo Encapsulamento É um processo no qual se ocultam as características internas de um objeto àqueles elementos que não têm porque conhece-las. Os modificadores de acesso servem para indicar as permissões que terão outros objetos para acessar a seus métodos e atributos Modificadores de acesso em PHP: Public Private Protected Encapsulamento Public - É o modificador de acesso padrão, ou seja, quando não se define o modificador de acesso de um método ou atributo, esse é interpretado pelo PHP como public. É o modificador mais permissivo, pois os métodos ou atributos public podem ser acessados em qualquer parte do programa. Na UML seu símbolo é + Private - É o modificador de acesso mais restritivo. Um atributo ou método private, só pode ser acessado pelo próprio objeto. Na UML seu símbolo é - Protected - É um modificador de restrição média. Um atributo ou método protected, pode ser acessado pelo próprio objeto e por objetos das classes filhas (que o herdou). Na UML seu símbolo é # Encapsulamento class Usuario { public $nome; //atributo public private $login; //atributo privado protect $senha; //atributo protegido public function Calcular() //método público { //métodos da função... } } Criar Objetos <?php include_once “Usuario.class.php"; //inclui classe usuário $objeto = new Usuario(); //cria objeto da classe pessoa ?> Criar Métodos <?php include_once ‘Usuario.class.php’; //inclui classe usuario $objeto = new Usuario(); //cria objeto da classe pessoa $objeto->Nome = ‘Carlos Alves’; //chama método setNome echo $objeto->MostrarNome() ); ?> //chama método getNome Métodos Construtores Em PHP, os métodos construtores podem ter dois possíveis nomes: Mesmo nome da classe; __construct Método SET Cada atributo private de uma classe, deve possuir um método public SET correspondente para que possam ser atribuidos valores a ele através desse método. Método SET <?php class Usuario { private $idUsuario; //atributo privado private $Nome; //atributo privado public function __construct() //criação do método construtor público { } public function setNome($n) { $this->Nome = $n; //atributo $Nome recebe o valor referente a $n } } ?> Método GET Cada atributo private de uma classe, deve possuir um método public GET correspondente para que possam ser recuperados seus valores através desse método. Método GET <?php class Usuario { private $idUsuario; //atributo privado private $Nome; //atributo privado public function __construct() { } public function getNome() { return $this->nome; } } ?> //criação do método construtor público //retorna valor do atributo $nome Herança Com a Herança, as classes podem herdar as características (atributos e métodos) de outras, de modo que se podem fazer classes especializadas, baseadas em outras mais gerais <?php include_once “Usuario.class.php"; //código da classe pai deve ser incluido na filha class Admin extends Usuario //classe Admin herda da classe Usuario { private $setor; public function __construct() { parent::__construct(); } } ?> //chama construtor da classe pai Herança Exemplo de chamada de métodos da classe admin que foram herdados da classe usuario <?php //nome do arquivo cria_objeto_heranca.php include_once “Admin.class.php"; //inclui classe Admin $objeto = new Admin(); //cria objeto da classe admin $aux = "Lucas Vegi"; //variável auxiliar recebe nome $objeto->setNome($aux); //chama método setNome echo( $objeto->getNome() ); //chama método getNome ?> Resumo de Conceitos Programação Orientada a Objetos É uma forma especial de analisar, projetar e programar, mais próximo de como expressaríamos as coisas na vida real do que outros tipos diferentes de programação. Linguagens Orientadas a Objetos Simula, Smalltalk, C++, Java, C#, Ruby, Python, PHP*, Javascript*, Perl*… Classe Representa um conjunto de objetos semelhantes. É utilizada para modelar entidades do mundo real. Resumo de Conceitos Objeto ou Instância São representações do mundo real. Instanciar Criar uma instância. Quando criamos um objeto dizemos que o instanciamos a partir de uma classe. Atributos Valores guardados por um objeto ou uma classe. Métodos Procedimentos que um objeto ou classe realizam. Resumo de Conceitos Construtor Permite aos objetos serem “inicializados” quando é instanciado. Destrutor Quando necessitamos que o objeto seja destruído. Por exemplo, “desalocação” dinâmica de memória. Herança Compartilhamento de atributos e métodos entre classes com base em um relacionamento hierárquico. Polimorfismo A mesma operação pode atuar de modos diversos em classes diferentes. Resumo de Conceitos Abstração Concentração nos aspectos essenciais, próprios, de uma entidade e em ignorar suas propriedades acidentais. Encapsulamento Mecanismo que provê a proteção de acesso aos membros internos de uma classe. Para atingir, uma das formas é a visibilidade de acesso. Public – Acesso público a todos (Default). Protected – Acesso dentro da própria classe a classes herdeiros Private – Acesso somente dentro da própria classe. Resumo de Conceitos Classe Abstrata Classe modelo que deve ser seguida pelas classes filhas, nunca é instanciado. Método Abstrato Método de uma classe abstrata que não possui implementação. Classe Final Não podem ser estendidas, ou seja, não pode ter subclasses. Método Final Método que não pode ser estendido e obviamente não pode ser abstrato (métodos abstratos foram feitos para serem estendidos). Resumo de Conceitos Métodos Mágicos Classe modelo que deve ser seguida pelas classes filhas, nunca é instanciado. Padrão MVC Benefícios do uso do MVC Grande aproveitamento de código; Facilita a manutenção de códigos existentes e também a adição de novos recursos nas camadas; Código limpo; Divisão de atividades dentro da equipe; É um padrão de projeto utilizado em todo o mundo; Existem dezenas de frameworks utilizando esta tecnologia. Método MVC