Ian Affonso Festas
1 Universidade do Sul de Santa Catarina Programação Orientada a Objeto Disciplina na modalidade a distância
2 Universidade do Sul de Santa Catarina Programação Orientada a Objeto Disciplina na modalidade a distância Palhoça UnisulVirtual 2011
4 Andréa Bordin Programação Orientada a Objeto Livro didático Revisão e Atualização de Conteúdo Samuel Pereira de Souza Design instrucional Flavia Lumi Matuzawa Karla Leonora Dahse Nunes 6ª edição Palhoça UnisulVirtual 2011
5 Copyright UnisulVirtual 2011 Nenhuma parte desta publicação pode ser reproduzida por qualquer meio sem a prévia autorização desta instituição. Edição Livro Didático Professor Conteudista Andréa Bordin Revisão e Atualização de Conteúdo Samuel Pereira de Souza (5ª ed. rev. e atual.) Design Instrucional Karla Leonora Dahse Nunes Flávia Lumi Matuzawa Leandro Kingeski Pacheco (4. ed. rev. e atual.) Assistente Acadêmico Michele Antunes Corrêa (5ª ed. rev. e atual.) Roberta de Fátima Martins (6ª edição) Projeto Gráfico e Capa Equipe UnisulVirtual Diagramação Rafael Pessi Alice Demaria Silva (5ª ed. rev. e atual.) Davi Pieper (6ª edição) Revisão Ortográfica B2B B72 Bordin, Andréa Programação orientada ao objeto : livro didático / Andréa Bordin ; revisão e atualização de conteúdo Samuel Pereira de Souza ; design instrucional Karla Leonora Dahse Nunes, Flavia Lumi Matuzawa, [Leandro Kingeski Pacheco ; assistente acadêmico Michele Antunes Corrêa, Roberta de Fátima Martins]. 6. ed. Palhoça : UnisulVirtual, p. : il. ; 28 cm. Inclui bibliografia. 1. Programação orientada a objetos (Computação). I. Souza, Samuel Pereira de. II. Nunes, Karla Leonora Dahse. III. Matuzawa, Flavia Lumi. IV. Pacheco, Leandro Kingeski. V. Corrêa, Michele Antunes. VI. Martins, Roberta de Fátima. VII. Título. Ficha catalográfica elaborada pela Biblioteca Universitária da Unisul
6 Sumário Apresentação...7 Palavras da professora...9 Plano de estudo UNIDADE 1 - Conhecendo a Linguagem de Programação Java UNIDADE 2 - Preparando o ambiente para programar em Java UNIDADE 3 - Sintaxe básica da linguagem Java UNIDADE 4 - Implementando os primeiros programas em Java UNIDADE 5 - Implementando programas em Java com controle de fluxo UNIDADE 6 - Desenvolvendo programas modularizados em Java UNIDADE 7 - Introdução à Programação Orientada a Objeto (POO) UNIDADE 8 - Conceitos de Orientação a Objeto UNIDADE 9 - Aplicando os conceitos de OO através de exemplos práticos UNIDADE 10 - Modificadores UNIDADE 11 - Objetos como atributos de outros objetos UNIDADE 12 - Associação na prática UNIDADE 13 - Herança UNIDADE 14 - Herança na prática Para concluir o estudo Referências Sobre a professora conteudista Respostas e comentários das atividades de autoavaliação Biblioteca Virtual...325
8 Apresentação Este livro didático corresponde à disciplina Programação Orientada a Objetos. O material foi elaborado visando a uma aprendizagem autônoma e aborda conteúdos especialmente selecionados e relacionados à sua área de formação. Ao adotar uma linguagem didática e dialógica, objetivamos facilitar seu estudo a distância, proporcionando condições favoráveis às múltiplas interações e a um aprendizado contextualizado e eficaz. Lembre-se que sua caminhada, nesta disciplina, será acompanhada e monitorada constantemente pelo Sistema Tutorial da UnisulVirtual, por isso a distância fica caracterizada somente na modalidade de ensino que você optou para sua formação, pois na relação de aprendizagem professores e instituição estarão sempre conectados com você. Então, sempre que sentir necessidade entre em contato; você tem à disposição diversas ferramentas e canais de acesso tais como: telefone, e o Espaço Unisul Virtual de Aprendizagem, que é o canal mais recomendado, pois tudo o que for enviado e recebido fica registrado para seu maior controle e comodidade. Nossa equipe técnica e pedagógica terá o maior prazer em lhe atender, pois sua aprendizagem é o nosso principal objetivo. Bom estudo e sucesso! Equipe UnisulVirtual. 7
10 Palavras da professora Olá! Você está iniciando a disciplina de Programação Orientada a Objetos. Nessa disciplina, primeiramente, será apresentada a você uma linguagem de programação. O nome da linguagem é Java. Através dessa linguagem de programação, você poderá desenvolver, no computador, os algoritmos que elaborou nas disciplinas de Lógica de Programação I e II. Você conseguirá ver seus programas funcionando, poderá testá-los e modificálos, já que terá o conhecimento de lógica e, também, de uma linguagem de programação. Para isso, as unidades iniciais deste livro serão dedicadas a passar todos os detalhes de sintaxe dessa linguagem. Será necessária muita atenção de sua parte, pois o desenvolvimento de instruções de um programa em uma linguagem de programação é uma tarefa muito detalhada. Seu programa pode não funcionar porque você esqueceu de programar, por exemplo, um ponto e vírgula. Mas, essa atenção será recompensada com a sua satisfação ao ver o seu programa funcionar. É uma sensação muito boa ver o primeiro programa em funcionamento. Conhecer uma linguagem de programação é um pré-requisito importante para que você possa aprender e colocar em prática os conceitos da programação orientada a objetos, que é o tópico principal deste livro e será tratado na maior parte das unidades. A programação orientada a objetos tem esse nome porque o seu objetivo é resolver um problema analisando como ele funciona no mundo real, ou seja, quais os objetos que atuam no problema, quais as características (atributos) e comportamentos desses objetos e como eles se relacionam.
11 Universidade do Sul de Santa Catarina É muito importante que você entenda os conceitos do paradigma orientado a objetos, pois a maioria dos sistemas, atualmente, é desenvolvida dentro dele. Você não estará sozinho nessa caminhada, o livro e o professor irão sanar suas dúvidas. Boa Sorte!! 10
12 Plano de estudo O plano de estudos visa a orientá-lo no desenvolvimento da disciplina. Ele possui elementos que o ajudarão a conhecer o contexto da disciplina e a organizar o seu tempo de estudos. O processo de ensino e aprendizagem na UnisulVirtual leva em conta instrumentos que se articulam e se complementam, portanto, a construção de competências se dá sobre a articulação de metodologias e por meio das diversas formas de ação/mediação. São elementos desse processo: o livro didático; o Espaço UnisulVirtual de Aprendizagem (EVA); as atividades de avaliação (a distância, presenciais e de autoavaliação); o Sistema Tutorial. Ementa Introdução aos conceitos de programação orientada a objetos. Abstração e modelo conceitual. Modelo de Objetos. Classes, atributos, métodos, mensagens/ações. Conceitos e Técnicas de programação. Desenvolvimento de sistemas com Classes. Bibliotecas, reusabilidade. Aplicações em ambiente WEB.
13 Universidade do Sul de Santa Catarina Objetivos Geral: Capacitar o aluno a analisar problemas e implementar programas utilizando o paradigma de programação orientada a objeto. Específicos: Compreender as bases da Abstração. Aplicar a Modularidade e Componibilidade para resolver um problema. Organizar o modelo usando Hierarquia. Implementação dos princípios da Orientação a Objeto (Objeto, Encapsulamento, Classe, Atributo, Operação, Relacionamentos, Herança, Generalização e Polimorfismo). Carga Horária A carga horária total da disciplina é 120 horas-aula. Conteúdo programático/objetivos Veja, a seguir, as unidades que compõem o livro didático desta disciplina e os seus respectivos objetivos. Estes se referem aos resultados que você deverá alcançar ao final de uma etapa de estudo. Os objetivos de cada unidade definem o conjunto de conhecimentos que você deverá possuir para o desenvolvimento de habilidades e competências necessárias à sua formação. Unidades de estudo: 14 12
14 Programação Orientada a Objeto Unidade 1: Conhecendo a Linguagem de Programação Java Esta unidade apresentará a linguagem de programação que será utilizada durante a disciplina, abordando o conceito de linguagens de programação, sua história e suas características, com foco na linguagem Java. Unidade 2: Preparando o ambiente para programar em Java Esta unidade tem por finalidade apresentar os passos para instalar e configurar o Java, mostrando os procedimentos necessários para a criação/execução de um programa em Java. Unidade 3: Sintaxe básica da linguagem Java Nesta unidade teremos contato com as primeiras instruções em Java, que permitirão o posterior aprofundamento nas unidades seguintes. Unidade 4: Implementando os primeiros programas em Java Esta unidade tem por finalidade mostrar os passos para a criação de um programa em Java com entrada e saída de dados e a declaração das variáveis em uma estrutura de classe da linguagem Java. Unidade 5: Implementando programas em Java com controle de fluxo O objetivo desta unidade é avançar na criação dos programas em Java com a utilização de controles de fluxo no programa. Será abordada em Java a estrutura condicional se senão e as estruturas de repetição enquanto/faça e para/faça, abordadas em Lógica de Programação. 13
15 Universidade do Sul de Santa Catarina Unidade 6: Desenvolvendo programas modularizados em Java Dando continuidade aos conceitos aprendidos em Lógica de Programação, nesta unidade veremos como estruturar um programa em Java para que o mesmo trabalhe de forma modularizada, apresentando, para isso, os conceitos de procedimento e função. Unidade 7: Introdução à Programação Orientada a Objeto (POO) Esta sétima unidade apresenta os conceitos básicos de programação orientada a objetos, introduzindo a visão inicial de classe e objeto, com a implementação de uma classe e a criação de um objeto a partir dela. Unidade 8: Conceitos de Orientação a Objeto Esta unidade aprofunda os conceitos vistos na unidade anterior, com a criação de programas com mais de um objeto. Conceitos como método construtor, métodos modificadores e recuperadores e encapsulamento serão abordados nesta unidade. Unidade 9: Aplicando os conceitos de OO através de exemplos práticos O objetivo desta unidade é aplicar os conceitos vistos nas unidades anteriores através de um exemplo prático. Unidade 10: Modificadores Nesta unidade, aprenderemos os conceitos dos modificadores de acesso public, private, protected e static e sua utilização através de exemplos práticos. 14
16 Programação Orientada a Objeto Unidade 11: Objetos como atributos de outros objetos Esta unidade tem como objetivo apresentar e exemplificar através do Java o conceito de associação, ou seja, o relacionamento entre classes. Unidade 12: Associação na prática Nesta unidade, será fixado o conceito de associação através de um exemplo prático, que aborda os conceitos trabalhados na unidade anterior. Unidade 13: Herança O objetivo desta unidade é abordar outro tipo de relacionamento: o conceito de herança. Serão apresentados as características desse tipo de relacionamento, o modificador de acesso protected e a redefinição de métodos em outra classe. Unidade 14: Herança na prática Seguindo a mesma metodologia vista em unidades anteriores, esta unidade apresenta de forma prática a utilização dos conceitos vistos na unidade anterior. 15
18 unidade 1 Conhecendo a Linguagem de Programação Java 1 Objetivos de aprendizagem Entender o que é uma linguagem de programação. Conhecer a história e características da linguagem. Identificar os tipos de aplicações Java. Seções de estudo Seção 1 Seção 2 Seção 3 Seção 4 Seção 5 Linguagens de Programação História da linguagem Java Linguagem Java Plataforma Java Tipos de Aplicações Java
19 Universidade do Sul de Santa Catarina Para início de estudo Vamos começar a disciplina de Orientação a Objetos revisando o que é uma linguagem de programação e conhecendo a história e características da linguagem de programação Java. Você também aprenderá vários conceitos relacionados à linguagem Java nas 5 unidades seguintes. Esse conhecimento será fundamental para o entendimento e aplicação dos conceitos do paradigma de programação orientado a objetos, que é o que vamos tratar nesta disciplina. Vamos começar? Bom estudo! Seção 1 - Linguagens de Programação Uma linguagem de programação é um método padronizado para expressar instruções para um computador. É um conjunto de regras usadas para definir um programa de computador. Uma linguagem permite que um programador especifique precisamente sobre quais dados um computador vai atuar, como esses dados serão armazenados ou transmitidos e quais ações devem ser tomadas sob várias circunstâncias. Programar diretamente em código de máquina costuma ser exaustivamente difícil, pois requer o conhecimento dessa sequência de números correspondente a uma sequência de instruções. Ex. decorar sequências como para cada instrução do processador. Um conjunto de palavras, composto de acordo com essas regras, constitui o código fonte de um programa. Código fonte é o conjunto de palavras escritas de forma ordenada, contendo instruções em uma das linguagens de programação existentes no mercado, de maneira lógica. Esse código fonte é, depois, traduzido para código de máquina, que é executado pelo processador. 18
20 Programação Orientada a Objeto Código de máquina consiste de uma sequência de números (0 e 1) que significam uma sequência de instruções que são reconhecidas e serão executadas pelo processador do computador. Linguagens de programação são classificadas em alto nível e baixo nível. As linguagens de alto nível se caracterizam por possuírem instruções ou comando expressos sintaticamente em inglês, ou seja, mais próximo de uma linguagem humana (por isso, alto nível). Ao se utilizar uma linguagem de programação de alto nível para desenvolver um programa, está se adquirindo produtividade, pois ela permite expressar as intenções do programador mais facilmente do que quando comparado com o uso de uma linguagem que um computador entende nativamente (código de máquina). Existem muitas linguagens de programação de alto nível: Java, C, Pascal, Object Pascal, Cobol, etc. As linguagens de baixo nível são aquelas cujas instruções ou comandos se aproximam bastante da linguagem ou código de máquina. Normalmente, cada instrução nessa linguagem representa uma instrução executada pelo microcomputador. A vantagem desse tipo de linguagem é a grande velocidade de execução dos programas e o tamanho dos mesmos que são mais compactos. O exemplo mais conhecido é a linguagem Assembly. Uma linguagem de programação pode ser convertida em código de máquina por compilação ou interpretação. Se o método utilizado traduz todo o código do programa (instruções que compõem o programa) para código de máquina e só depois o programa pode ser executado (ou rodado), diz-se que o programa foi compilado e que o mecanismo utilizado para a tradução é um compilador (que também é um programa). A versão compilada do programa tipicamente é armazenada em um arquivo.exe (com extensão.exe), de forma que o programa pode ser executado um número indefinido de vezes sem que seja necessária nova compilação. Linguagens como Pascal e C são compiladas. Unidade 1 19
21 Universidade do Sul de Santa Catarina Se o código do programa é traduzido à medida que vai sendo executado, isso acontece nas linguagens Javascript, Python ou Perl, em um processo de tradução de trechos seguidos de sua execução imediata. Então, diz-se que o programa foi interpretado e que o mecanismo utilizado para a tradução é um interpretador. Programas interpretados são geralmente mais lentos do que os compilados. Seção 2 - História da linguagem Java Java é ao mesmo tempo uma linguagem de programação e uma plataforma. Você entenderá essa diferença mais à frente, estudando as próximas unidades. Site principal da linguagem Java: Ela é desenvolvida e mantida pela Sun e foi planejada inicialmente para ser usada no desenvolvimento de programas que eram executados por processadores de eletrodomésticos. Os projetistas de sistemas de controle desses processadores, descontentes com linguagens convencionais de programação, como C, propuseram a criação de uma linguagem específica para uso em processadores de aparelhos domésticos, como geladeiras e torradeiras. Todo o descontentamento dos projetistas residia no fato de que programas escritos e compilados em C são fortemente dependentes da plataforma para a qual foram desenvolvidos. Como o ramo de eletroeletrônicos está em constante evolução, para cada novo liquidificador lançado no mercado com um novo processador embutido, um novo programa deveria ser escrito e compilado para funcionar no novo processador, ou então, na melhor das hipóteses, o antigo programa poderia ser reaproveitado, mas teria de ser recompilado para o novo processador. 20
22 Programação Orientada a Objeto Os projetistas de software de eletrodomésticos desejavam que o software por eles fabricado fosse seguro e robusto, capaz de funcionar em um ambiente tão adverso quanto uma cozinha. E que fosse confiável também, pois quando ocorre alguma falha em um aparelho eletroeletrônico, peças mecânicas são trocadas, gerando um custo a mais para o fabricante. No início de 1990, Patrick Naughton, Sun Fellow e James Gosling, começaram a definir as bases para o projeto de uma nova linguagem de programação, apropriada para eletrodomésticos, sem os problemas já tão conhecidos de linguagens tradicionais como C e C++. O consumidor era o centro do projeto e o objetivo era construir um ambiente de pequeno porte e integrar esse ambiente em uma nova geração de máquinas para pessoas comuns. A especificação da linguagem terminou em agosto de 1991 e recebeu o nome de Oak [Carvalho]. Por problemas de copyright (já existia uma linguagem chamada Oak) o nome foi mudado em 1995 para Java, em homenagem à ilha de Java, de onde vinha o café consumido pela equipe da Sun. Em 1992, Oak foi utilizada pela primeira vez em um projeto chamado Projeto Green, que tinha por propósito desenvolver uma nova interface de usuário para controlar os aparelhos de uma casa. Tal interface consistia em uma representação animada da casa, que era exibida em um computador manual chamado star seven, bisavô dos palmtops de hoje e que tinha uma tela sensível ao toque que permitia a manipulação dos eletrodomésticos. Essa interface foi totalmente escrita em Oak e evoluiu de um projeto de interface para redes de televisão pay-per-view. Contudo, o padrão proposto por esses dois projetos não vingou. Em meados de 1993, pode-se dizer que Oak ia mal das pernas, ou seja, os projetos propostos não eram economicamente viáveis e não se via um grande futuro no desenvolvimento de aparelhos que suportassem essa nova linguagem. Justamente nessa época, a World Wide Web estava em seu nascimento, trazendo um novo horizonte para a Internet. É importante lembrar que a Internet já existia muito antes do surgimento da WWW. Esta nada mais é que um conjunto de protocolos que permite um acesso mais amigável aos recursos disponíveis na Internet. Dentre esses protocolos, por exemplo, o mais conhecido é o de transferência de hipertexto [http]. Unidade 1 21
23 Universidade do Sul de Santa Catarina Com o lançamento do primeiro browser do mercado, o Mosaic, ocorreu à equipe de desenvolvimento da Sun, que uma linguagem independente de plataforma, segura e robusta como a que estava sendo desenvolvida para eletrodomésticos, caberia como uma luva para uso na Internet, uma vez que um aplicativo gerado nessa linguagem poderia rodar nos diversos tipos de computadores ligados na Internet. Ou seja, poderia rodar em qualquer computador com qualquer sistema operacional, por exemplo, PCs rodando OS/2, estações RISC rodando AIX Unix ou SparcStations rodando Solaris. 23 de maio de 1995 é a data do lançamento da linguagem Java no mundo. Com o novo ânimo trazido pelo advento da WWW, a equipe da Sun desenvolveu um browser totalmente escrito em Java. Seu desenvolvimento terminou no início de 1995 e ele foi denominado de HotJava. O grande diferencial de HotJava para outros browsers da época (como o Mosaic e o Netscape Navigator) é que ele permitia a inserção de programas escritos em Java dentro de páginas HTML comuns. HotJava como browser não teve sucesso comercial, mas abriu os olhos dos desenvolvedores para um fato muito importante: as páginas HTML estariam fadadas a ser estáticas e sem ações embutidas em si, não houvesse uma linguagem padrão pela qual fossem escritos programas que pudessem ser embutidos nas páginas Web. HotJava demonstrou que isso era possível (ou seja, incluir um programa, no caso escrito em Java, em uma página HTML rodando em um browser preparado para dar suporte à execução do programa, no caso o próprio HotJava). O grande avanço de Java veio logo a seguir, quando a Netscape anunciou que sua próxima versão do browser Navigator iria dar suporte a aplicativos Java embutidos em documentos HTML. Em seguida, a Microsoft anunciou o mesmo para o seu Internet Explorer. Após isso, Java estourou no mundo e começou a ser utilizada também fora da internet no desenvolvimento de softwares stand-alone. E, como dito anteriormente, Java é ao mesmo tempo uma linguagem de programação e uma plataforma, conforme você verá a seguir. 22
1 PROGRAMAÇÃO ORIENTADA A OBJETOS Prof Daniel Hasse Engenharia da Computação SÃO JOSÉ DOS CAMPOS, SP UNIDADE 1 Conhecendo a Linguagem de Programação Java 1 Objetivos de aprendizagem Entender o que é uma