Baixe o app para aproveitar ainda mais
Prévia do material em texto
Programação Orientada a Objetos I 1 Programação Orientada a Objetos I Tatiane Aparecida Gomes Pereira 1ª e di çã o Programação Orientada a Objetos I 2 DIREÇÃO SUPERIOR Chanceler Joaquim de Oliveira Reitora Marlene Salgado de Oliveira Presidente da Mantenedora Wellington Salgado de Oliveira Pró-Reitor de Planejamento e Finanças Wellington Salgado de Oliveira Pró-Reitor de Organização e Desenvolvimento Jefferson Salgado de Oliveira Pró-Reitor Administrativo Wallace Salgado de Oliveira Pró-Reitora Acadêmica Jaina dos Santos Mello Ferreira Pró-Reitor de Extensão Manuel de Souza Esteves DEPARTAMENTO DE ENSINO A DISTÂNCIA Gerência Nacional do EAD Bruno Mello Ferreira Gestor Acadêmico Diogo Pereira da Silva FICHA TÉCNICA Texto: Tatiane Aparecida Gomes Pereira Revisão Ortográfica: Rafael Dias de Carvalho Moraes Projeto Gráfico e Editoração: Antonia Machado, Eduardo Bordoni, Fabrício Ramos e Victor Narciso Supervisão de Materiais Instrucionais: Antonia Machado Ilustração: Eduardo Bordoni e Fabrício Ramos Capa: Eduardo Bordoni e Fabrício Ramos COORDENAÇÃO GERAL: Departamento de Ensino a Distância Rua Marechal Deodoro 217, Centro, Niterói, RJ, CEP 24020-420 www.universo.edu.br Ficha catalográfica elaborada pela Biblioteca Universo – Campus Niterói P455p Pereira, Tatiane Aparecida Gomes. Programação orientada a objetos I / Tatiane Aparecida Gomes Pereira ; revisão de Rafael Dias de Carvalho Moraes. – 1. ed. – Niterói, RJ: UNIVERSO: Departamento de Ensino à Distância, 2018. 191 p. : il. 1. Programação orientada a objetos (Computação). 2. Java (Linguagem de programação de computador). 3. Métodos orientados a objetos (Computador). 4. Interface de programas aplicativos (Software). 5. Banco de dados. 6. SQL (Linguagem de programação de computador). 7. Ensino à distância. I. Moraes, Rafael Dias de Carvalho. II. Título. CDD 005.13 Bibliotecária: Elizabeth Franco Martins – CRB 7/4990 Informamos que é de única e exclusiva responsabilidade do autor a originalidade desta obra, não se r esponsabilizando a ASOEC pelo conteúdo do texto formulado. © Departamento de Ensi no a Dist ância - Universidade Salgado de Oliveira Todos os direitos reservados. Nenhuma parte desta publicação pode ser reproduzida, arquivada ou transmitida de nenhuma forma ou por nenhum meio sem permissão expressa e por escrito da Associação Salgado de Oliveira de Educação e Cultura, mantenedora da Univer sidade Salgado de Oliveira (UNIVERSO). Programação Orientada a Objetos I 3 Palavra da Reitora Acompanhando as necessidades de um mundo cada vez mais complexo, exigente e necessitado de aprendizagem contínua, a Universidade Salgado de Oliveira (UNIVERSO) apresenta a UNIVERSOEAD, que reúne os diferentes segmentos do ensino a distância na universidade. Nosso programa foi desenvolvido segundo as diretrizes do MEC e baseado em experiências do gênero bem-sucedidas mundialmente. São inúmeras as vantagens de se estudar a distância e somente por meio dessa modalidade de ensino são sanadas as dificuldades de tempo e espaço presentes nos dias de hoje. O aluno tem a possibilidade de administrar seu próprio tempo e gerenciar seu estudo de acordo com sua disponibilidade, tornando-se responsável pela própria aprendizagem. O ensino a distância complementa os estudos presenciais à medida que permite que alunos e professores, fisicamente distanciados, possam estar a todo o momento, ligados por ferramentas de interação presentes na Internet através de nossa plataforma. Além disso, nosso material didático foi desenvolvido por professores especializados nessa modalidade de ensino, em que a clareza e objetividade são fundamentais para a perfeita compreensão dos conteúdos. A UNIVERSO tem uma história de sucesso no que diz respeito à educação a distância. Nossa experiência nos remete ao final da década de 80, com o bem- sucedido projeto Novo Saber. Hoje, oferece uma estrutura em constante processo de atualização, ampliando as possibilidades de acesso a cursos de atualização, graduação ou pós-graduação. Reafirmando seu compromisso com a excelência no ensino e compartilhando as novas tendências em educação, a UNIVERSO convida seu alunado a conhecer o programa e usufruir das vantagens que o estudar a distância proporciona. Seja bem-vindo à UNIVERSOEAD! Professora Marlene Salgado de Oliveira Reitora Programação Orientada a Objetos I 4 Programação Orientada a Objetos I 5 Sumário Apresentação da disciplina ............................................................................................. 07 Plano da disciplina ............................................................................................................ 09 Unidade 1 – Conceitos de Programação Orientada a Objetos .............................. 13 Unidade 2 – Orientação a Objetos na Linguagem Java ........................................... 35 Unidade 3 – Método Aplicado........................................................................................ 67 Unidade 4 – Manipulação................................................................................................ 103 Unidade 5 – Conhecendo a API...................................................................................... 139 Unidade 6 – Introdução à Banco de Dados em Java ................................................. 157 Considerações finais ......................................................................................................... 181 Conhecendo o autor ......................................................................................................... 182 Referências .......................................................................................................................... 183 Anexos.................................................................................................................................. 185 Programação Orientada a Objetos I 6 Programação Orientada a Objetos I 7 Apresentação da Disciplina Iniciaremos aqui nossos estudos sobre programação orientada a objetos, paradigma de programação que torna a programação mais facilidade, tornando-a um modelo de programação de sistemas que se funda na composição e também interação entre objetos. Este paradigma de programação, portanto, tenta aproximar a parte computacional do mundo real, tentando simular o mundo real dentro de um computador, trazendo para o espaço virtual a figura dos objetos. Estes objetos representam objetos do mundo real, representam uma realidade o mais próxima possível do mundo real, que permite que possamos modelar, projetar e desenvolver nossos softwares de maneira mais estável. Os objetos representados na programação orientada a objetos possuem estado e comportamento que influenciam o sistema. Aqui aprenderemos conceitos importantes sobre a POO a fim de que, enquanto, programadores, possamos moldar o mundo real no formato de objetos com comportamentos e estado, fazendo-os interagir entre si, por meio de envio de mensagens. Assim, nós programadores devemos definir quais são as mensagens que cada tipo de objeto poderá receber, quais ações ele deverá realizar ao receber cada tipo de mensagem. Com a POO, podemos reutilizar códigos, utilizar mecanismos de herança que permitem que uma nova classe de objetos herde características de uma classe já existente, que passa a ser denominada superclasse, e polimorfismo que significa que duas ou mais classes derivadas de uma superclasse, em comum, possam chamar métodos com a mesma identificação e assinatura, mas com comportamento distintos. Para aplicar os conceitos aprendidos sobre a POO iremos iniciar na linguagem de programação Java, que é uma linguagem voltada ao paradigma da POO, que possui importantes mecanismos como gerenciamento automático de memória, permite que o programador nãoprecise se preocupar com detalhes de baixo nível dentre eles a memória, o processamento, ponteiros, lixo e outros. A linguagem Java não é compilada na arquitetura do computador, ela roda em uma máquina virtual, a JVM. Java assegura-nos portabilidade, podendo ser utilizada também para Internet e para aparelhos móveis. A linguagem Java e grandamente utilizada para diversos tipos de aplicação, desde programas para rodar em deskotps a programas utilizados em caixas eletrônicos, aparelhos telefônicos como smartphones e também pela Nasa. Programação Orientada a Objetos I 8 Programação Orientada a Objetos I 9 Plano da Disciplina Ao longo de nossos estudos aprenderemos sobre a programação orientada a objetos, paradigma de análise, projeto e programação de softwares baseada na interação entre os objetos, base do modelo de programação. Na unidade 2, iniciaremos a aplicação dos conceitos como variáveis, tipos de dados, estrutura condicionais da POO na linguagem Java, que é uma linguagem POO. Na unidade 3 conheceremos as classes, que permite a definição de tipos de dados na linguagem POO, além disso aprenderemos a lidar com essas classes, utilizando métodos, atributos, construtores. Já na unidade 4, iremos, na linguagem Java estudar sobre a manipulação de objetos, tratando especificamente de vetores, enumerações, datas, tratamento de exceções. Na unidade 5 conheceremos uma API que nos permite a adaptação de funcionalidades das classes existentes às necessidades de cada tipo de aplicação que iremos desenvolver, assim, em Java existem diversos classes organizadas na API padrão, que poderemos utilizar conforme nossas necessidades de programação. E, por fim, na unidade 6, faremos uma introdução à conexão de banco de dados com as aplicações que desenvolveremos em Java, aprendendo assim, a conectar um BD ao nosso software e a utilizar seus diversos recursos básicos para manipular e recuperar dados. Unidade 1 - Conceitos de Programação Orientada a Objeto Nesta unidade, estudaremos os conceitos de programação orientada a objetos, entendo o que é um objeto, encapsulamento, herança, polimorfismo e qual a importância de cada conceito deste na programação e na manipulação de dados, após a definição da linguagem a desenvolver. Objetivos da unidade: x Conhecer a programação orientada a objetos; x Analisar a importância e as facilidades do uso desta programação; x Aprender conceitos de objetos, encapsulamento, herança e polimorfismo. Programação Orientada a Objetos I 10 Unidade 2 – Orientação a Objetos na linguagem Java Nesta unidade, aprenderemos sobre programação orientada a objetos usando Java, conheceremos a plataforma Java, como declarar variáveis, o que são tipos de dados, e um pouco de estruturas condicionais e de repetição. Nesta unidade, começaremos a programar em Java. Objetivos da unidade: x Conhecer a plataforma Java; x Aprender a declarar variáveis, a fazer uso das estruturas condicionais e de repetição; x Aprender sobre tipos de dados. Unidade 3 – Método Aplicado Nesta unidade, estudaremos sobre o método aplicado, que corresponde a uma sub-rotina executada por um objeto ao receber uma mensagem. Os métodos são responsáveis por determinar o comportamento dos objetos de determinada classe, semelhante a funções ou procedimento da programação estruturada. Objetivos da unidade: x Analisar um método aplicado; x Entender o mecanismo de funcionamento do método aplicado; x Aplicar métodos na programação orientada a objetos. Unidade 4 – Manipulação Nesta unidade, estudaremos sobre manipulação em Java. Trataremos da manipulação de vetores, objetos. Estudaremos sobre o tratamento de exceções bem como iniciaremos conceitos de interface gráfica. Objetivos da unidade: x Aprender a realizar manipulações em vetores, objetos; x Reutilizar códigos; x Entender como funciona a criação de interfaces gráficas. Programação Orientada a Objetos I 11 Unidade 5 – Conhecendo a API Nesta unidade, estudaremos sobre a Interface de Programação de Aplicativos em Java que corresponde a uma interface de programação que nada mais é que um conjunto de padrões para a programação. Essa API permite a construção de aplicativos como veremos ao longo deste capítulo. Objetivos da unidade: x O pacote Java. lang; x Class Object; x Wrappers dos tipos primitivos. Unidade 6 - Introdução à Banco de Dados Nesta unidade, trataremos sobre a conexão de banco de dados em Java, o que possibilita que possamos armazenar grande quantidade de dados, que obteremos a partir da interação do usuário com o programa aplicativo. Objetivos da unidade: x Aprender conceitos de banco de dados; x Utilizar SQL; x Usar interface java para BD. Programação Orientada a Objetos I 12 Programação Orientada a Objetos I 13 Conceitos de Programação Orientada a Objeto 1 Programação Orientada a Objetos I 14 Caro aluno, Nesta unidade, estudaremos os conceitos de programação orientada a objetos, entendo o que é um objeto, encapsulamento, herança, polimorfismo e qual a importância de cada conceito deste na programação e na manipulação de dados, após a definição da linguagem a desenvolver. Objetivos da unidade: x Conhecer a programação orientada a objetos; x Analisar a importância e as facilidades do uso desta programação; x Aprender conceitos de objetos, encapsulamento, herança e polimorfismo. Plano da unidade: x Objetos x Encapsulamento x Herança x Polimorfismo Bons estudos! Programação Orientada a Objetos I 15 Para entender o que é a Programação Orientada a Objetos é necessário que se entenda primeiro a conceituação de programas e modelos, que são os fundamentos da Programação em si. Rafael Santos (2001) descreve que: “Os programas são conjuntos de comandos e regras que um programador deve conhecer para poder manipular os recursos do computador”. (SANTOS, 2001, p.24). Rafael Santos ainda destaca que “Modelos são representações simplificadas de objetos, pessoas, itens, tarefas, processos, conceitos, ideias etc., usados comumente por pessoas no seu dia-a dia, independente do uso de computadores.” (SANTOS, 2001, p.24-25). A partir deste contexto, entendem-se que os modelos são criados para representar objetos, os modelos podem ser reutilizados, e não há necessidade da criação de diversos modelos, um único modelo pode conter vários dados em si. A partir da conceituação de modelos, houve a criação da modelagem de dados na programação ao qual se tem a programação orientada a objetos como um dos recursos que usa esta modelagem baseada em modelos e objetos. (SANTOS, 2001). Segundo Rafael Santos (2001) a programação orientada a objetos ou POO é: é um paradigma de programação de computadores onde se usam classes e objetos, criados a partir dos modelos, para representar e processar dados usando programas de computadores. Em programação orientada a objetos, os dados pertencentes aos modelos são representados por tipos de dados nativos, ou seja, que são característicos da linguagem de programação. Dados também podem ser representados por modelos já existentes na linguagem ou por outros modelos criados pelo programador. (SANTOS, 2001, p.27). A programação orientada a objetos surgiu na década de 60, e se baseava na Teoria da Álgebra, e em 90 começou a ser utilizada a nível computacional, com o intuito de facilitar a modelagem de dados para o programador. Para Daniela Barreiro Claro e João Bosco Mangueira Sobral (2008), a programação orientada a objetos tem por objetivo: Programação Orientada a Objetos I 16 [...] modelar o mundo real, e garantir que as taxas de manutenibilidade (manutenção) serão maiores diante deste contexto. Isso é possível, pois utilizando uma linguagem de programação orientada a objetos consegue- se obter um desenvolvimento mais rápido, visto que este desenvolvimento ocorreem módulos, em blocos de códigos correspondentes aos objetos e seus acoplamentos. Através da orientação a objetos, pode-se obter uma maior qualidade e agilidade no desenvolvimento, pois o fator reusabilidade (reutilização) permite que se re-utilize outros objetos que foram anteriormente desenvolvidos e podem ser facilmente incorporados na aplicação. A reusabilidade também garante uma manuseabilidade melhor do programa, pois os testes referentes aos componentes, já foram previamente executados, garantindo assim a utilização coesa dos objetos. (CLARO, SOBRAL, 2008, p. 8). Para definir a programação orientada a objetos por meio do contexto de modelos, que é a conceituação de um objeto é essencial que o modelador entenda os atributos e instâncias necessárias a se declarar no modelo, antes que o programador referencie o objeto em si, ele deve entender o modelo que irá caracterizar aquele objeto. A definição do modelo é a definição do objeto, assim Rafael Santos (2001) define modelo como: Um modelo comumente contém operações ou procedimentos associados a ele. Estas operações são listas de comandos que processarão os dados contidos no próprio modelo (e em alguns casos, dados adicionais). Também é possível a criação de modelos que contenham somente dados ou somente operações. Modelos que contenham somente dados são poucos usados: normalmente os valores destes dados variam de uso para uso de modelo, portanto operações que modificam os valores dos dados serão necessárias. (SANTOS, 2001, p. 25- 26). Em programação orientada a objetos os modelos conceituados até o momento serão chamados de classes e objetos, seus dados serão implementados da mesma forma, é importante que a criação do modelo, ou classe e objetos tenham todos os atributos e instâncias necessários para se compuser a modelagem que se exige, como demonstra exemplo abaixo: Programação Orientada a Objetos I 17 Modelar uma conta bancária simplificada: Neste exemplo modela-se uma conta bancária simplificada, que somente representa o nome do correntista, o saldo da conta e se a conta é especial ou não. Se a conta for especial, o correntista terá direito de retirar mais dinheiro do que tem no saldo (ficar com saldo negativo). Aspectos práticos encontrados em contas de bancos reais (senhas, taxas, impostos etc.) foram deixados de lado em nome da simplicidade. Figura 1: Conta bancária simplificada modelo (dados e operações)- atributos ContaBancariaSimplificada - nomeDoCorrentista - saldo - contaEEspecial - abreConta (nome, depósito, éEspecial) - abreContaSimples (nome) - deposita (valor) - retira (valor) - mostraDados ( ) Fonte: SANTOS, 2001, p.31. Na figura 1, temos a modelagem simplifica do modelo conta bancária, onde temos como dados nome do correntista, saldo, e conta especial, e operações abre conta(), abrecontaSimples(), deposita(valor) ,retira(valor),mostraDados(). Assim nós temos os dados e suas principais operações, que podem ser transformadas em Java em classes, objetos. Onde teremos a classe abre conta()com os objetos ou instâncias (nome, depósito, éEspecial). Programação Orientada a Objetos I 18 Figura 2: Conta bancária simplificada em pseudo-código modelo ContaBancariaSimplificada início do modelo dado nomeDoCorrentista, saldo, contaEEspecial; // dados da conta // Inicializada simultaneamente todo os dados do modelo operação abreConta (nome, depósito, especial) // argumentos para este operação início // Usa os argumentos passados para inicializar os dados do modelo nomeDoCorrentista = nome; saldo = depósito; contaÉEspecial = especial fim //Inicializa simultaneamente todos os dados do modelo, usando o nome //passado como argumento e os outros valores com valores default operação abreConsultaSimples (nome) // argumento para esta operação início nomeDoCorrentista = nome; saldo = 0.0; contaÉEspecial = falso; fim //Deposita um valor na conta Operação deposita (valor) início saldo = saldo+valor; fim //Retira um valor da conta operação retira(valor) início se (contaEEspecial = falso) // A conta não é especial! início se (valor <= saldo) /// se existe saldo suficiente... saldo = saldo-valor; / / faz a retirada. fim senão // A conta é especial, pde retira à vontade! saldo = saldo-valor; fim Programação Orientada a Objetos I 19 Fonte: SANTOS,2001, p.31-32. Na figura 2, a modelagem é realizada em pseudocódigo, para identificar como ficará o código se implementado e compilado em uma linguagem qualquer. Por meio do modelo é que se cria os objetos, como será conceituado. Objetos Os objetos são os elementos que irão representar a modelagem de dados, é através do objeto que se cria as características necessárias para se conceituar o modelo a ser representado. Na POO a base da programação é a caracterização dos objetos e classes, é fazer com que estes objetos se comuniquem e façam uma aplicação funcionar corretamente por meio desta comunicação, assim a estruturação dos objetos e caracterização de cada um é fundamental para prover esta comunicação de forma eficaz. A figura 3 apresenta-nos um esquema simples da troca de mensagem entre dois objetos. operação mostraDados () // mostra os dados da conta, imprimindo os seu valores início imprime “O nome do correntista é “; imprime nomeDoCorrentista; imprime “O saldo é “; imprime saldo; se (contaÉEspecial) imrime “ A conta é especial.”; senão imprime “A conta é comum.”: fim fim do modelo Programação Orientada a Objetos I 20 Figura 3: Troca de mensagens entre dois objetos Fonte: CLARO e SOBRAL, 2008, p.9. Neste contexto a comunicação dos objetos se dá entre si, por meio da troca de mensagens, e esta troca de mensagens pode ocorrer por meio da definição de métodos, onde se define que um objeto qualquer necessita que outro execute um comando, esta é a base da programação orientada a objetos .Ivan Luiz Marques Ricarte( 2001) afirma que: Objetos são instâncias de classes. É através deles que (praticamente) todo o processamento ocorre em sistemas implementados com linguagens de programação orientadas a objetos. O uso racional de objetos, obedecendo aos princípios associados à sua definição conforme estabelecido no paradigma de desenvolvimento orientado a objetos, é chave para o desenvolvimento de sistemas complexos e eficientes. Um objeto é um elemento que representa, no domínio da solução, alguma entidade (abstrata ou concreta) do domínio de interesse do problema sob análise. Objetos similares são agrupados em classes. (RICARTE, 2001, p.4-5). Programação Orientada a Objetos I 21 Os objetos como são chamados de instâncias de classes, os mesmos permitem a manipulação de métodos e atributos de um objeto. Em programação orientada a objetos a referência a um objeto se dá pelo operador new(). Assim para se declarar um objeto, usa-se o operador, como demonstra a exemplo abaixo: Quando se referencia um objeto, ou seja, quando se cria um objeto na programação se aloca um espaço em memória para este objeto, bem como para suas operações, seus atributos, métodos. Para Ivan Luiz Marques Ricarte (2001) cada operação que envolve a criação do objeto irá ser representada como um objeto para o programador. Da mesma forma, quando se cria um objeto, esse objeto adquire um espaço em memória para armazenar seu estado (os valores de seu conjunto de atributos, definidos pela classe) e um conjunto de operações que podem ser aplicadas ao objeto (o conjunto de métodos definidos pela classe). Um programa orientado a objetos é composto por um conjunto de objetos que interagem através de “trocas de mensagens”. Na prática, essa troca de mensagem traduz-se na aplicação de métodos a objetos. (RICARTE, 2001, p. 6) Estes métodos sãoimportantes para definir quais os tipos de operações que os objetos irão desenvolver durante o programa, quando se cria um objeto se define seus atributos, na programação estes atributos não podem ser visíveis, bem como os métodos não devem ser definidos detalhadamente, e sim somente o usuário entender sua funcionalidade, para que isso aconteça a programação conta com o recurso de encapsulamento de informações, que deve ser usado durante todo o projeto de programação, desde a criação do objeto e definição de seus atributos. Modelo: <identificador> = new <Classe> ( [param1], [param2] ); Exemplo: Data data = new Data(); Programação Orientada a Objetos I 22 Encapsulamento O encapsulamento é a ocultação dos dados é uma forma de demonstrar como os dados são processados sem permitir que se conheça os detalhes. Na programação orientada a objetos a ocultação de dados é uma forma de permitir que as operações aconteçam sem que o usuário tenha total acesso à manipulação dos dados em si. Assim Ivan Luiz Marques Ricarte (2001) define encapsulamento como: Encapsulação é o princípio de projeto pelo qual cada componente de um programa deve agregar toda a informação relevante para sua manipulação como uma unidade (uma cápsula). Aliado ao conceito de ocultamento de informação é um poderoso mecanismo da programação orientada a objetos. Ocultamento da informação é o princípio pelo qual cada componente deve manter oculta sob sua guarda uma decisão de projeto única. Para a utilização desse componente, apenas o mínimo necessário para sua operação deve ser revelado (tornado público). Na orientação a objetos, o uso da encapsulação e ocultamento da informação recomenda que a representação do estado de um objeto deve ser mantida oculta. Cada objeto deve ser manipulado exclusivamente através dos métodos públicos do objeto, dos quais apenas a assinatura deve ser revelada. O conjunto de assinaturas dos métodos públicos da classe constitui sua interface operacional. Dessa forma, detalhes internos sobre a operação do objeto não são conhecidos, permitindo que o usuário do objeto trabalhe em um nível mais alto de abstração, sem preocupação com os detalhes internos da classe. Essa facilidade permite simplificar a construção de programas com funcionalidades complexas, tais como interfaces gráficas ou aplicações distribuídas. (RICARTE, 2001, p.5). Programação Orientada a Objetos I 23 O encapsulamento então é o método utilizado na programação para ocultar detalhes internos de um projeto de programação, permitindo que o usuário conheça apenas as funcionalidades do objeto, da classe, do programa, e assim o mesmo terá acesso à interface gráfica do programa e suas funcionalidades e não aos processos de desenvolvimento de cada etapa do projeto. Herança Herança é um mecanismo da programação orientada a objetos que significa herdar, a herança na programação é herdar características da superclasse. Assim uma superclasse com seus atributos ao ser criada automaticamente gera o conceito de herança para as demais classes que serão criadas dentro da classe ao qual pertence, herdando assim as suas características. Em Java, quando o usuário não declara qual classe será a superclasse (a classe que gera o mecanismo de herança), automaticamente a classe Object é declarada superclasse. Figura 4: Hierarquia de classes Fonte: CLARO e SOBRAL, 2008, p.46. Programação Orientada a Objetos I 24 Segundo Ivan Luiz Marques Ricarte (2001): Herança é um mecanismo que permite que características comuns a diversas classes sejam fatoradas em uma classe base, ou superclasse. A partir de uma classe base, outras classes podem ser especificadas. Cada classe derivada ou subclasse apresenta as características (estrutura e métodos) da classe base e acrescenta a elas o que for definido de particularidade para ela. Há várias formas de relacionamentos em herança: Extensão: a subclasse estende a superclasse, acrescentando novos membros (atributos e/ou métodos). A superclasse permanece inalterada, motivo pelo qual este tipo de relacionamento é normalmente referenciado como herança estrita. Especificação: a superclasse especifica o que uma subclasse deve oferecer, mas não implementa nenhuma funcionalidade. Diz-se que apenas a interface (conjunto de especificação dos métodos públicos) da superclasse é herdada pela subclasse. Combinação de extensão e especificação: a subclasse herda a interface e uma implementação padrão de (pelo menos alguns de) métodos da superclasse. A subclasse pode então redefinir métodos para especializar o comportamento em relação ao que é oferecido pela superclasse, ou ter que oferecer alguma implementação para métodos que a superclasse tenha declarado, mas não implementado. Normalmente, este tipo de relacionamento é denominado herança polimórfica. (RICARTE, 2001, p.7). Figura 5: Descrição em Java da Hierarquia de classes Fonte: CLARO e SOBRAL, 2008, p.47. class Pai { …… } class Filho extends Pai { …… } class Filha extends Pai { …. } class Neta extends Pai { …. } Programação Orientada a Objetos I 25 Na herança o conceito de relacionamento é predominante e é este conceito que define a hierarquia de classes para que se crie uma herança apropriada. Assim, para definir a hierarquia apropriada, utiliza-se sempre o conceito de relacionamento “é um” como especificado por KON et al (2006,133), “A relação superclasse subclasse deve necessariamente ser um relacionamento do tipo "é um", ou seja, se B é subclasse de A então todo B é um A.” A figura ilustra este conceito de relacionamento, onde animal é um ser vivo, e todo animal é um ser vivo. Não existe nenhum animal que não seja um ser vivo, neste caso relacionamento superclasse-subclasse é apropriado. Figura 6:Hierarquia de classes Fonte: KON; GOLDMAN e SILVA, 2006.p.132. Programação Orientada a Objetos I 26 Para entender melhor alguns quesitos ligados à herança Fabio Kon, et al (2006) definem algumas diretrizes importantes: _ uma classe pode herdar de outra seus atributos e métodos; _ uma subclasse pode estender a funcionalidade de sua superclasse acrescentando novos atributos e métodos. Mas, e se uma subclasse implementar um método com assinatura idêntica a um método da superclasse? Neste caso, quem prevalece é o método da subclasse e dizemos que o método da subclasse se sobrepõe ("overrides") ao método da superclasse. (KON et al, 2006, p. 133) Figura 7: Representação de herança de classes Fonte: SANTOS, 2001, p.187. Programação Orientada a Objetos I 27 Nesta figura a classe pacientedeClinica e Funcionario herdam da classe Pessoa seus métodos e atributos, tudo que for modificado na classe Pessoa será modificado nas classes que são herdeiras da classe Pessoa e a Classe ChefedeDepartamento herda os campos da classe Funcionario e indiretamente da classe Pessoa. Assim, temos que a herança é um mecanismo que se utilizado de forma adequada possui funcionalidades que permite o uso de atributos e métodos no contexto de classes que define facilidades na hora de implementar um código, a herança permite que o programador crie um método para um superclasse e só o referencie em outras partes do código, herdando todo o código já executado. Polimorfismo O polimorfismo é um mecanismo que permite a manipulação de instâncias de classes, onde se executa métodos que recebam instâncias de classes herdadas. Segundo Ivan Luiz Marques Ricarte (2001), o polimorfismo é: o princípio pelo qual duas ou mais classes derivadas de uma mesma superclasse podem invocar métodos que têm a mesma identificação (assinatura) mas comportamentos distintos, especializados para cada classe derivada, usando para tanto uma referência a um objeto do tipo da superclasse. Esse mecanismo é fundamental na programação orientada a objetos, permitindo definir funcionalidadesque operem genericamente com objetos, abstraindo-se de seus detalhes particulares quando esses não forem necessários. Para que o polimorfismo possa ser utilizado, é necessário que os métodos que estejam sendo definidos nas classes derivadas tenham exatamente a mesma assinatura do método definido na superclasse; nesse caso, está sendo utilizado o mecanismo de redefinição de métodos (overriding). Esse mecanismo de redefinição é muito diferente do mecanismo de sobrecarga de métodos, onde as listas de argumentos são diferentes. No caso do polimorfismo, o compilador não tem como decidir qual o método que será utilizado se o método foi redefinido em outras classes — afinal, pelo princípio da substituição um objeto de uma classe derivada pode estar sendo referenciado como sendo um objeto da superclasse. Se esse for o caso, o método que deve ser selecionado é o da classe derivada e não o da superclasse. Programação Orientada a Objetos I 28 Dessa forma, a decisão sobre qual dos métodos método que deve ser selecionado, de acordo com o tipo do objeto, pode ser tomada apenas em tempo de execução, através do mecanismo de ligação tardia. O mecanismo de ligação tardia também é conhecido pelos termos em inglês late binding, dynamic binding ou ainda run-time binding.(RICARTE, 2001,p.8). Na figura abaixo, temos um exemplo de polimorfismo, definido pela classe ConcessionariadeAutomoveis que cria um método imprime e recebe uma instância da classe Automovel como argumento e imprime os dados desta instância usando métodos específicos toString,quantoCusta, quantasPrestacoes e estes métodos podem ser instanciados para outras classes, usando o contexto de polimorfismo. Figura 8: Representação de herança de classes /** * A classe ConcessionariaDeAutomoveis, que implementa o processo de venda de * automóveis em uma concessionária. Para cada tipo de automóvel, o preço e número de * suas prestações será impresso. O modelo representado é extremamente simples, e a * concessionária somente tem cinco automóveis à venda. * Esta classe demonstra polimorfismo de classes usando instâncias das classes * herdeiras da classe Automovel. Um método da classe aceitará instâncias de qualquer * classe herdeira de Automovel. */ class ConcessionariaDeAutomoveis { /** * O método main permite a execução desta classe. Este método contém declarações de * algumas instâncias das classes Automovel, AutomovelBasico e AutomovelDeLuxo, e as * usa para mostrar o valor da prestação de cada automóvel. * @param argumentos os argumentos que podem ser passados para o método via linha * de comando, mas que neste caso serão ignorados. */ public static void main(String[] argumentos) { // Criamos uma instância da classe Automovel Automovel a1 = new Automovel("Fiat","bege",Automovel.MOVIDOAALCOOL); // Criamos duas instâncias da classe AutomovelBasico // Uma com o construtor básico AutomovelBasico a2 = new AutomovelBasico("Corsa","cinza", Automovel.MOVIDOAGASOLINA); // E outra com o construtor mais completo AutomovelBasico a3 = new AutomovelBasico("Gol","branco", Automovel.MOVIDOAGASOLINA, Programação Orientada a Objetos I 29 Fonte: SANTOS, 2001, p.199. false,false,true); // Criamos duas instâncias da classe AutomovelDeLuxo // Uma com o construtor básico AutomovelDeLuxo a4 = new AutomovelDeLuxo("Ibiza","vermelho", Automovel.MOVIDOAGASOLINA); // E outra com o construtor mais completo AutomovelDeLuxo a5 = new AutomovelDeLuxo("Honda","prata", Automovel.MOVIDOAGASOLINA, true,true,false, true,false,true); // Imprimimos o "catálogo" da concessionária, ou seja, os dados dos automóveis, // preços e condições de pagamento. imprime(a1); imprime(a2); imprime(a3); imprime(a4); imprime(a5); } // fim do método main /** * O método imprime mostra os dados de uma instância de qualquer classe que * descenda da classe Automovel. Os métodos quantoCusta, quantasPrestações e * toString das instâncias serão chamados. * @param a uma instância de qualquer classe que herde da classe Automovel. */ public static void imprime(Automovel a) { System.out.println("Seguem os dados do automóvel escolhido:"); System.out.print(a); // chamada implícita a toString System.out.println("Valor: "+a.quantoCusta()); System.out.println(a.quantasPrestações()+" prestações de "+ (a.quantoCusta()/a.quantasPrestações())); } // fim do método imprime } // fim da classe ConcessionariaDeAutomoveis Programação Orientada a Objetos I 30 Ao longo desta unidade, aprendemos um pouco sobre os conceitos da programação orientada a objetos, bem como de seus principais recursos como objetos, encapsulamento, herança e polimorfismo que são a base para o entendimento da programação orientada a objetos. Na próxima unidade, trataremos da programação orientada a objetos em Java, conhecendo seus principais recursos. É hora de se avaliar Lembre-se de realizar as atividades desta unidade de estudo. Elas irão ajudá-lo a fixar o conteúdo, além de proporcionar sua autonomia no processo de ensino-aprendizagem. Bons estudos e até a próxima unidade! Programação Orientada a Objetos I 31 Exercícios – Unidade 1 1-Na programação orientada a objetos são características dos objetos. a)As classes, os métodos e as mensagens. b) A identidade, os atributos e as operações. c) O encapsulamento, a herança e o polimorfismo. d) A instanciação, a generalização e a especialização. e) A classificação, a composição e a decomposição 2-Na programação orientada a objetos, o encapsulamento: a) é a base de toda a abordagem dessa metodologia de programação e diz-se que um dado está encapsulado quando envolvido por código de forma que só é visível na rotina onde foi criado; o mesmo acontece com uma rotina, que sendo encapsulada, suas operações internas são invisíveis às outras rotinas. b) pode ser entendido como sendo um conjunto de instâncias criadas a partir de um outro conjunto de instâncias com características semelhantes. c) é definido como sendo uma técnica que permite a um código possuir "vários comportamentos" ou produzir "vários comportamentos". d) possibilita a criação de uma nova classe de modo que essa classe (denominada subclasse, classe-filha ou classe derivada) herda todas as características da classe- mãe (denominada superclasse, classe base ou classe primitiva); podendo, ainda, a classe-filha possuir propriedades e métodos próprios. e) é considerado como a habilidade de modelar características do mundo real do problema que o programador esteja tentando resolver. Programação Orientada a Objetos I 32 3-Na programação orientada a objetos, a instanciação de objetos tem o objetivo de: a) criar um objeto. b) definir atributos e métodos de uma classe c) inicializar uma classe. d) abstrair os atributos de um objeto e) classificar um objeto 4-Em programação orientada a objetos, a possibilidade de haver funções de mesmo nome, com funcionalidades similares em classes sem nenhuma relação entre elas, denomina-se: a) encapsulamento. b) objeto. c) classe. d) polimorfismo. e) relacionamento hierárquico. 5-No paradigma de programação Orientada a Objetos, a Herança facilita: a) a leitura e a escrita de código pelo compartilhamento de nomes dos métodos. b) a reutilização e a modificação dos módulos de códigos existentes. c) esconder e proteger detalhes da implementação. d) a definição de classes abstratas. e) a composição e interação entre os objetos. Programação Orientada a Objetos I 33 6-Na programação orientada a objetos, o conceito de polimorfismo indica que: a) cada classe tem uma limitação quanto ao número de atributos que a compõe. b) o código de cada operação tem um limite máximo no número de linhas de código. c) o nome dos métodos deve ser composto por, no máximo, 8 caracteres. d) o nome das classes deve sercomposto por, no máximo, 20 caracteres. e) uma certa operação de uma classe pode nem sempre ativar o mesmo método. 7-Na programação orientada a objetos utiliza-se o conceito de encapsulamento, segundo o qual: a) os objetos de uma classe devem ser armazenados em tabelas de um gerenciador de banco de dados relacional. b) todos os atributos de uma classe devem possuir o mesmo tipo de dados. c) as classes devem possuir apenas atributos, sem nenhum método próprio. d) detalhes da implementação de uma classe são ocultados das demais classes. e) os objetos de uma classe devem ser armazenados diretamente em objetos de um gerenciador de banco de dados orientado a objetos. 8-O conceito de encapsulamento na orientação a objetos refere-se: a) ao mecanismo pelo qual uma classe pode estender outra classe, aproveitando seus comportamentos (métodos) e variáveis possíveis (atributos). b) à separação dos aspectos internos e externos de um objeto, restringindo o acesso direto ao estado do objeto. c) à habilidade de concentrar nos aspectos essenciais de um contexto qualquer, ignorando características menos importantes ou acidentais. d) ao princípio pelo qual classes distintas podem invocar métodos que têm a mesma assinatura, mas comportamentos especializados. e) à utilização do mesmo nome para símbolos ou métodos com funcionalidades distintas, geralmente diferenciados pela sua assinatura. Programação Orientada a Objetos I 34 9-O que é a programação Orientada a Objetos? ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ 10- O que é Ocultamento da Informação? ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ Programação Orientada a Objetos I 35 2 Orientação a Objetos na linguagem Java Programação Orientada a Objetos I 36 Caro aluno, Nesta unidade, aprenderemos sobre programação orientada a objetos usando Java, conheceremos a plataforma Java, como declarar variáveis, o que são tipos de dados, e um pouco de estruturas condicionais e de repetição. Começaremos a programar em Java. Objetivos da unidade: Conhecer a plataforma Java; Aprender a declarar variáveis, a fazer uso das estruturas condicionais e de repetição; Aprender sobre tipos de dados. Plano da unidade: x A plataforma x Ambientes de desenvolvimento x Estrutura da linguagem x Variáveis e Operadores x Tipos de dados x Estruturas condicionais x Estruturas de Repetição Bons estudos! Programação Orientada a Objetos I 37 A linguagem de programação Java foi desenvolvida pela Sun Microsystems e é um aplicativo que permite desenvolver aplicações para desktop, aplicações Web e as mais novas versões já rodam em celulares. Os microprocessadores estão tendo um impacto profundo em dispositivos eletrônicos inteligentes de consumo popular. Reconhecendo isso, a Sun Microsystems, em 1991, financiou um projeto de pesquisa corporativa interna chefiado por James Gosling, que resultou em uma linguagem de programação orientada a objetos chamada C++, que a empresa chamou de Java. Um objetivo-chave do Java é ser capaz de escrever programas a serem executados em uma grande variedade de sistemas computacionais e dispositivos controlados por computador. Isso às vezes é chamado de “escreva uma vez, execute em qualquer lugar”. Por uma feliz casualidade, a web explodiu em popularidade em 1993 e a Sun viu o potencial de utilizar o Java para adicionar conteúdo dinâmico, como interatividade e animações, às páginas da web. O Java chamou a atenção da comunidade de negócios por causa do interesse fenomenal pela web. Ele é agora utilizado para desenvolver aplicativos corporativos de grande porte, aprimorar a funcionalidade de servidores da web (os computadores que fornecem o conteúdo que vemos em nossos navegadores), fornecer aplicativos para dispositivos voltados ao consumo popular (por exemplo, telefones celulares, smartphones, televisão, set-up boxes etc.) e para muitos outros propósitos. Ainda, ele também é a linguagem-chave para desenvolvimento de aplicativos Android adequados a smartphones e tablets. A Sun Microsystems foi adquirida pela Oracle em 2010. (DETEIL; DEITEL, 2017, p.13). A linguagem Java permite que os aplicativos desenvolvidos rodem em qualquer máquina desde que contenha uma máquina virtual implementada para a linguagem. Usa o conceito de threads (muitas tarefas), suporte a programação para internet, permite o uso de acesso remoto, possui mecanismos de segurança robustos, sintaxe baseada em C. Segundo Daniela Barreiro Claro e João Bosco Mangueira Sobral (2008, p.13): Programação Orientada a Objetos I 38 Programas escritos em Java, podem ser Applets, Aplicativos ou ainda Servlets. Os aplicativos são programas que necessitam de um interpretador instalado na máquina. Enquanto que Applets são programas carregados juntamente com páginas HTML. O interpretador, no caso das Applets, é o próprio browser. Não necessita instalação, basta que o browser usado ofereça suporte a Java. Já no caso dos Servlets, são programas desenvolvidos em Java que são interpretados pelo Servidor Web. Os servlets são utilizados na geração dinâmica de páginas HTML. Atualmente, são muito utilizados na combinação com JSP (Java Server Pages) para a utilização do MVC (Model View Controller). (CLARO E SOBRAL 2008, p.13): A linguagem permite a programação em vários tipos de plataformas com versatilidade de uso, neste sentido, temos várias versões que apresentam funcionalidades diferenciadas para os tipos de softwares necessários, como demonstra Paul Deitel e Harvey Deitel (2017, p.3): O Java Standard Edition contém os recursos necessários para desenvolver aplicativos de desktop e servidor. O Java Enterprise Edition ( Java EE) é adequado para desenvolver aplicativos em rede distribuída e em grande escala e também aplicativos baseados na web. No passado, a maioria dos aplicativos de computador era executada em computadores “independentes” (que não estavam conectados em rede). Já os aplicativos de hoje podem ser escritos para que se comuniquem entre os computadores no mundo pela internet e web. O Java Micro Edition ( Java ME) — um subconjunto do Java SE — é voltado para o desenvolvimento de aplicativos para dispositivos embarcados com recursos limitados, como smartwatches, MP3 players, decodificadores de TV (set-top boxes), medidores inteligentes (para monitorar o uso de energia elétrica) e muitos outros: A linguagem Java permite o desenvolvimento de aplicações que nos dias atuais são usadas para executar programas com mais facilidade, em diversas plataformas.Programação Orientada a Objetos I 39 A plataforma A linguagem de programação Java tem a sintaxe parecida com a linguagem C, com características particulares que são a orientação a objetos e a portabilidade, que acontece por permitir que os softwares desenvolvidos em Java sejam executados em qualquer máquina, trabalha com threads, possui segurança robusta. Quando se fala em plataforma, entende-se da combinação de sistema operacional e hardware, assim a plataforma Java se caracteriza por ter uma máquina virtual que permite que todos os programas desenvolvidos em Java rodem em qualquer máquina sem que tenham o problema da combinação de sistema e hardware. Para Victorio Albani de Carvalho e Giovany Frossard Teixeira (2012, p.19), plataformas são: Descritas como a combinação do sistema operacional e o hardware em que rodam. Nesse contexto, a maioria das plataformas de desenvolvimento existentes possui uma restrição marcante: cada programa é produzido para uma plataforma (Sistema Operacional + hardware) específica. A plataforma Java difere dessas plataformas pelo fato de desagregar o hardware de si, ou seja, trata-se de uma plataforma de software que roda em cima de outras plataformas baseadas em hardware. (CARVALHO e TEIXEIRA 2012, p.19). É nesta plataforma que os programas são executados, a plataforma Java possui independência nesta execução por usar o conceito de máquina virtual como conceitua Victorio Albani de Carvalho e Giovany Frossard Teixeira (2012, p.19): Essa independência de hardware obtida pela plataforma Java deve-se à utilização do conceito de máquina virtual: a Java Virtual Machine (JVM). A JVM é um software que funciona sobre o sistema operacional, sendo responsável pelo processo de tradução de um programa Java para uma plataforma específica. Assim, um programa feito em Java pode rodar em qualquer SO de qualquer arquitetura, desde que exista uma JVM implementada para ele. Programação Orientada a Objetos I 40 Figura 9: Execução de um aplicativo Java Fonte: CARVALHO e TEIXEIRA, 2012, p.20. Ambientes de desenvolvimento Um ambiente de desenvolvimento Java consiste no ambiente ao qual pode-se criar os programas e executá-los. Na plataforma Java os programas podem ser escritos em editores de texto e serem executados por meio de um kit de aplicação Java, bem como existem vários depuradores de erros lógicos que são chamados de ambientes integrados (IDEs) que fornecem ferramentas para o desenvolvimento dos softwares em Java, como: Eclipse, Netbeans e outros. Victorio Albani de Carvalho e Giovany Frossard Teixeira (2012, p.21), afirma que o NetBeans é: [...] um ambiente de desenvolvimento integrado gratuito e de código aberto. Esse IDE é executado em muitas plataformas, como Windows, Linux, Solaris e MacOS, sendo fácil de instalar e usar. O NetBeans IDE oferece aos desenvolvedores todas as ferramentas necessárias para criar aplicativos profissionais de desktop, empresariais, web e móveis multiplataformas. Programação Orientada a Objetos I 41 Figura 10: Criação de um programa em Java Fonte: DEITEL, Paul e DEITEL, Harvey, 2017, p.14. Victorio Albani de Carvalho e Giovany Frossard Teixeira (2012, p.20) Um programa Java precisa passar por um processo de compilação para ser analisada a existência de erros de sintaxe. Esse processo de compilação traduz o código-fonte escrito pelo programador para uma linguagem intermediária chamada Java bytecodes. Esse processo de tradução dos códigos fontes para Java bytecodes é feito por um programa chamado compilador. Então, é necessário que outra ferramenta chamada interpretador se responsabilize por interpretar esses bytecodes para o sistema operacional. Essa ferramenta que interpreta bytecodes é a máquina virtual Java (JVM). O conjunto de ferramentas necessárias para desenvolver, compilar e rodar aplicativos Java é disponibilizado em um kit conhecido como Java Development Kit (JDK). Assim, para começar a programar em Java você deve realizar o download do JDK e instalá-lo. (CARVALHO, TEIXEIRA, 2012, p, 20). Programação Orientada a Objetos I 42 Para executar um programa na plataforma Java o mesmo passa pelo processo de compilação que irá verificar o código e executá-lo em sua totalidade. Figura 11: Compilação em Java Fonte: CLARO e SOBRAL, 2008, p.17. Estrutura da linguagem A linguagem de programação Java tem a estrutura voltada para a orientação a objetos com a sintaxe parecida com a linguagem C, é uma linguagem case sensitive, ao fazer um código o compilador diferencia letras maiúsculas e minúsculas, assim ao declarar uma variável deve-se ter esta atenção. Em Java todo código já inicia com a declaração de uma classe, que é definida pela palavra reservada class. Programação Orientada a Objetos I 43 Figura 12: Programas em Java e C Fonte: CARVALHO e TEIXEIRA, 2012, p.21. Segundo Daniela Barreiro Claro e João Bosco Mangueira Sobral (2008, p.19), a estrutura básica de uma aplicação Java se caracteriza por: Possuir um método main(). O método main é o método chamado pelo interpretador Java quando executado. A declaração do método deve ser rigorosamente: public static void main( String[] args), onde define um método de classe de acesso público, sem retorno, que recebe como parâmetro um array de Strings de tamanho indefinido, representado pela variável args. O args é a declaração do objeto do Array de String, por isso pode ser atribuído a ele qualquer nome. A disposição dos atributos e métodos é feita de forma aleatória, ou seja, não importa a ordem, apenas necessitam respeitar regras de validade de escopo das variáveis. Segue exemplo de um código simples em Java: Exemplo em Java public class Exemplo01{ public static void main(String[ ] args){ System.out.println( “Primeiro Exemplo”); } } Exemplo em C int main( ) { printf (“Primeiro Exemplo!\n”); } class OlaMundo { public static void main( String[] args ) { //corpo do programa //Escreve na tela: Ola Mundo. System.out.println(“Ola Mundo”); } } Programação Orientada a Objetos I 44 Public: É um quantificador do método que indica que este é acessível externamente a esta classe (por outras classes que eventualmente seriam criadas). Este tópico será abordado posteriormente. Static: É um qualificador que indica que este método é um método de classe, ou seja, há uma cópia somente por classe. Os métodos static podem ser invocados, mesmo quando não for criado nenhum objeto para a classe, para tal deve-se seguir a sintaxe: <NomeCasse>.<NomeMetodoStatic>(argumentos) Void: Semelhante ao void do C/C++, corresponde ao valor de retorno da função. Quando a função não retorna nenhum valor ela possui a palavra reservada void no local de retorno, uma espécie de valor vazio que tem que ser especificado. Main: É um nome particular do método que indica para o compilador o início do programa, é dentro deste método e através de interações entre os atributos e argumentos visíveis nele que o programa se desenvolve. String[] args: É o argumento do método main e por conseqüência, do programa todo, é um array de Strings que é formado quando são passados ou não argumentos através da invocação do nome do programa na linha de comando do sistema operacional. { .... } “Abre chaves” e “fecha chaves”: delimitam um bloco de código (semelhante a BEGIN e END em Pascal). System.out.println: Chamada do método println para o atributo out da classe System. O argumento é uma constante do tipo String. println assim como o writeln de Pascal, imprime na saída padrão a String e posiciona o cursor na linha abaixo, analogamente print não avança a linha. (CLARO,SOBRAL, 2008, p.20-21). Programação Orientada a Objetos I 45 Para fazer um comentário em Java usa-se a estruturaabaixo: Comentário de bloco /* texto */ Todo o texto é ignorado. Este tipo de comentário pode ocupar várias linhas. Comentário de Linha // texto Todo o texto depois de // até o final da linha será ignorado. Comentário do JavaDoc /** Comentário para documentação */ Na linguagem Java há palavras chaves, palavras reservadas para uso próprio pela linguagem e que não podem ser usadas de outras forma na linguagem, quer seja como declaração de variáveis ou outros. Figura 13: Palavras chaves abstract boolean break byte case cast catch char class const continue default do double else extends final finally float for future generic goto if implements impor inner instanceof int interface long native new null operator outer package private protected public rest return short static super switch synchronized this throw throws transient try var void volatile while Fonte: CLARO e SOBRAL, 2008, p.22. Programação Orientada a Objetos I 46 Para fazer exibir o resultado do código em Java usa-se o comando abaixo apresentado por Paul Deitel e Harvey Deitel (2017, p. 31). System.out.println("Welcome to Java Programming!"): instrui o computador a executar uma ação, ou seja, exibir os caracteres contidos entre as aspas duplas (as próprias aspas não são exibidas). Juntos, as aspas e os caracteres entre elas são uma string — também conhecida como string de caracteres ou string literal. Os caracteres de espaço em branco em strings não são ignorados pelo compilador. As strings não podem distribuir várias linhas de código. O objeto System.out — que é predefinido para você — é conhecido como objeto de saída padrão. Ele permite que um aplicativo Java exiba informações na janela de comando a partir da qual ele é executado. Em versões recentes do Microsoft Windows, a janela de comando chama-se Prompt de Comando. No Unix/Linux/Mac OS X, a janela de comando é chamada janela terminal ou shell. Muitos programadores simplesmente a chamam linha de comando. O método System.out.println exibe (ou imprime) uma linha de texto na janela de comando. A string entre parênteses é o argumento para o método. Quando System.out.println completa sua tarefa, ele posiciona o cursor de saída (o local em que o próximo caractere será exibido) no começo da linha seguinte na janela de comando. Isso é semelhante àquilo que acontece ao pressionar a tecla Enter depois de digitar em um editor de texto — o cursor aparece no início da próxima linha no documento. Incluindo System.out.println, o argumento “Welcome to Java Programming!" entre parênteses e o ponto e vírgula (;), é uma instrução. Um método normalmente contém uma ou mais instruções que executam a tarefa. A maioria das instruções acaba com um ponto e vírgula. Quando a instrução executa, ela exibe Welcome to Java Programming! na janela de comando. Programação Orientada a Objetos I 47 Figura 14: Exibição do resultado de um código Java Fonte: DEITEL, Paul. DEITEL. Harvey, 2017, p. 34. Variáveis e Operadores A linguagem Java possui em sua estrutura a conceituação de atributos que é a mesma coisa de variável, os atributos determinam os dados em si, e para a declaração de um atributo é necessário a declaração do seu tipo, com a declaração do tipo identifica-se o tipo de informação que poderá ser armazenado no mesmo. CLARO, SOBRAL (2008, p.23) determina que: “Atributos em Java podem ser declarados no corpo da classe ou podem ser declarados localmente em qualquer parte da implementação de um método”. Para a declaração de uma variável primeiro declaramos o tipo, a variável e podemos definir valores a atribuição de valores é feita pelo operador =. public class Welcome2 { //metodo main inicia a execução do aplicativo Java public static voin main( String[ ] args) { System.out.print (“Welcome to”); System.out.println ( “Java Programming!”); } // fim do método main } //fim da classe Welcome2 Welcome To Java Programming! Sintaxe: <tipo> <identificador> [= <valor inicial>]; e <identificador> = <valor>; Programação Orientada a Objetos I 48 Os valores também podem ser inicializados depois que as variáveis forem declaradas. Segue alguns exemplos de declaração de variáveis. (CLARO, SOBRAL, 2008) Ivan Luiz Marques Ricarte (2001, p.10), afirma que para a declaração de variáveis ou identificadores é importante seguir umas regras básicas como determinadas abaixo: Identificadores são seqüências de caracteres Unicode, que devem obedecer às seguintes regras: _ Um nome pode ser composto por letras, por dígitos e pelos símbolos _ e $. _ Um nome não pode ser iniciado por um dígito (0 a 9). _ Letras maiúsculas são diferenciadas de letras minúsculas. _ Uma palavra-chave da linguagem Java não pode ser um identificador. Java diferencia as letras minúsculas das maiúsculas. Assim, as duas variáveis int socorro; int soCorro; são variáveis diferentes. Além dessas regras obrigatórias, o uso da convenção padrão para identificadores Java torna a codificação mais uniforme e pode facilitar o entendimento de um código. Embora não seja obrigatório, o conhecimento e uso da seguinte convenção padrão para atribuir nomes em Java pode facilitar bastante a manutenção de um programa: _ Nomes de classes são iniciados por letras maiúsculas. _ Nomes de métodos, atributos e variáveis são iniciados por letras minúsculas. _ Em nomes compostos, cada palavra do nome é iniciada por letra maiúscula— as palavras não são separadas por nenhum símbolo. int diasFerias, outroInteiro; double salario; float umFloat = 0.5; char letra = ‘i’; boolean achou = false; diasFerias = 30; Programação Orientada a Objetos I 49 No Java tem a possibilidade da declaração de constantes que são variáveis reservadas que tem por função permitir que o valor seja atribuído uma única vez à variável como afirma Daniela Barreiro Claro e João Bosco Mangueira Sobral (2008, p.24). final double AUMENTO = 5,25; As constantes em Java são definidas através da palavra reservada FINAL. Esta palavra reservada tem por características atribuir somente uma vez o valor à variável. Para determinar que uma variável é uma constante, basta inserir a palavra reservada no inicio da definição da mesma. As constantes em Java têm por característica e estilo serem escritas em caixa alta e inicializadas com um determinado valor. (CLARO, SOBRAL, 2008, p. 24). Os operadores podem ser aritméticos e relacionais, os mesmos são símbolos usados para executar operações matemáticas, os operadores são os mesmos usados em outras linguagens. Operador Descrição da operação matemática + Soma (inteira e ponto flutuante) - Subtração (inteira e ponto flutuante) * Multiplicação (inteira e ponto flutuante) / Divisão (inteira e ponto flutuante) -- Decremento unário (inteiro e ponto flutuante) ++ Incremento unário (inteiro e ponto flutuante) % Resto da divisão de inteiros Adaptado de CARVALHO e TEIXEIRA, 2012. Programação Orientada a Objetos I 50 Segundo Paul Deitel e Harvey Deitel (2017, p. 42) os operadores aritméticos quando usados na programação em Java são usados com uma ordem de precedência como demonstrado a seguir: O Java aplica os operadores em expressões aritméticas em uma sequência precisa determinada pelas seguintes regras de precedência de operador, que são geralmente as mesmas que aquelas seguidas em álgebra: 1. As operações de multiplicação, divisão e de resto são aplicadas primeiro. Se uma expressão contiver várias dessas operações, elas serão aplicadas da esquerda para a direita. Os operadores de multiplicação, divisão e resto têm o mesmo nível de precedência. 2. As operações de adição e subtração são aplicadas em seguida. Se uma expressão contiver várias dessas operações, os operadores serão aplicados da esquerda para a direita. Os operadores de adição e subtração têm omesmo nível de precedência. Essas regras permitem que o Java aplique os operadores na ordem correta.1 Quando dizemos que operadores são aplicados da esquerda para a direita, estamos nos referindo à sua associatividade. Operador(es) Operação(ões) Ordem de avaliação (precedência) * Multiplicação Avaliado primeiro. Se houver vários operadores desse tipo, eles são avaliados da esquerda para a direita. / Divisão % Resto + Adição Avaliado em seguida. Se houver vários operadores desse tipo, eles são avaliados da esquerda para a direita. - Subtração = Atribuição Avaliado por último. Adapatado de DEITEL, Paul. DEITEL. Harvey, 2017. Programação Orientada a Objetos I 51 Já os operadores relacionais são usados para executar operações em códigos Java de comparação entre dois valores, retornando um valor lógico como resultado, este valor será verdadeiro ou falso. (CARVALHO, TEIXEIRA, 2012). Descrição Operador igual a == (dois sinais de igual) maior que > menor que < maior ou igual a >= menor ou igual a <= diferente de != Adaptado de CARVALHO e TEIXEIRA, 2012. E os operadores lógicos que são utilizados para formar proposições com a junção de outras proposições lógicas. Descrição Operador E && OU || (duas barras verticais) Não ! (exclamação) Adaptado de CARVALHO e TEIXEIRA, 2012. Além dos operadores no Java, as operações permitem o uso da atribuição composta que é usada para atribuir a uma variável qualquer o valor dela mesma adicionado a outro valor, como segue exemplos. (CLARO, SOBRAL, 2008, p.25). x += 10; // Equivale x = x + 10; x += y; // Equivale x = x + y; a -= b; // Equivale a = a – b; a *= 3; // Equivale a = a * 3; Programação Orientada a Objetos I 52 No quadro de operadores aritméticos foram apresentados dois operadores diferentes chamados incremento e decremento, estes operadores são muito utilizados na linguagem Java para facilitar ao programador o uso de novas operações que as básicas já apresentadas. Os operadores de incremento e decremento segundo Daniela Barreiro Claro e João Bosco Mangueira Sobral (2008, p.25), são: O incremento é dado pelo operador ++ e o decremento pelo operador --. Este decremento ou incremento pode ser feito antes ou depois da utilização da variável, dependendo da necessidade do programador em relação a atribuição do dado. Colocando os operadores antes das variáveis será realizado primeiro a operação para depois o valor da variável ser utilizado. Ao contrário, caso o operador esteja localizado após a variável, será realizado primeiramente a variável para depois ser realizado o incremento ou o decremento da variável. E o uso do operador ternário na linguagem Java é utilizado quando se faz uso de operações de condição, neste caso as operações irão executar uma expressão ou outra em um bloco de código, como explana Daniela Barreiro Claro e João Bosco Mangueira Sobral (2008, p.26). O operador ternário permite que se realize operações simplificadas de condições. Uma condição trabalhada no Java como IF-THEN-ELSE pode ser manipulada através do operador ternário. O operador ternário é formado por uma condição, e em caso positivo, é executada uma ação e em caso negativo, outra ação pode ser executada. x<y ? e1:e2 onde, x<y é a condição, e em caso positivo será executado e1 e em caso negativo será executado e2. Segue abaixo um exemplo com valores: String a = 1<2 ? “Menor” : “Menor” O valor de a será “Menor ”, visto que 1 é menor que 2. i++; //Equivalente a: i = i +1; i--; //Equivalente a: i = i -1; ++i; //Equivalente a: i = i +1; --i; //Equivalente a: i = i -1; Programação Orientada a Objetos I 53 Os operadores permitem que a execução da programação em Java seja facilitada quando os operadores são usados de forma correta, na linguagem Java os operadores são usados para determinar várias atribuições ao processo de execução dos códigos. Tipos de dados Os tipos de dados são usados para determinar quais os tipos de informações que podem ser inicializadas e armazenadas nas variáveis declaradas em um bloco de código. Java é uma linguagem fortemente tipada, ou seja, todas as variáveis definidas na linguagem devem possuir um tipo de dados definido. Além disso, a linguagem possui os tipos primitivos de dados que permite que os mesmos tenham tamanhos pré-determinados (fixos) para cada tipo, independente da máquina que o programa está sendo compilado ou interpretado.( CLARO, SOBRAL,2008, p.23). Figura 15: Tipos de dados Fonte: CLARO e SOBRAL, 2008, p. 23. Programação Orientada a Objetos I 54 Tipo primitivo Valores a serem armazenados Tamanho em bits char Permite armazenar um caractere. Exemplo: ‘a’. 16 byte Permite armazenar um número inteiro de -128 até +127. Exemplo: 10. 8 short Permite armazenar um número inteiro de -32.768 até +32.767. Exemplo: 10. 16 int Permite armazenar um número inteiro de -2.147.483.648 até +2.147.483.647. Exemplo: 10. 32 long Permite armazenar um número inteiro de -9.223.372.036.854.775.808 até +9.223.372.036.854.775.807. Exemplo: 10. 64 float Permite armazenar um ponto flutuante de -3,40292347E+38 até +3,40292347E+38. Exemplo: 3.1416. 32 double Permite armazenar um ponto flutuante de -1,79769313486231570E+308 até +1,79769313486231570E+308. Exemplo: 3.1416. 64 boolean Permite armazenar apenas o valor true ou o valor false. 8 Adaptado de CARVALHO e TEIXEIRA, 2012. O uso do tipo de dados define além do tipo de informação que irá ser atribuído à variável também irá determinar o espaço de memória que deverá ser alocado para a variável. Na programação Java, usa-se a conversão de tipo de dados primitivos, onde se utiliza uma variável que esteja declarada com um tipo para gerar um novo tipo de dados, este tipo de operação é permitido quando se quer aumentar o tamanho de uma variável, mudar a informação que a variável pode armazenar. Segundo Victorio Albani de Carvalho e Giovany Frossard Teixeira (2012, p.23-25), a conversão de tipos primitivos consiste em: Programação Orientada a Objetos I 55 Utilizar uma variável ou valor de um tipo para gerar um novo valor de outro tipo. Em alguns casos essa conversão é feita de forma direta, como, por exemplo, quando atribuímos um valor inteiro a uma variável do tipo double. Nesse caso a conversão é direta (também chamada de conversão implícita) porque é óbvio que um número inteiro pode ser representado como um número real. Mas, alguns tipos de variáveis apresentam valores incompatíveis entre si. Assim, nesses casos não é possível fazer uma atribuição direta. Por exemplo, se tentarmos atribuir a uma variável inteira o valor de uma variável double, teremos um erro de compilação. Para que atribuições como esta sejam possíveis, precisamos solicitar explicitamente que o número real seja moldado (casted) como um número inteiro. Essa operação de conversão entre tipos é também chamada de casting. Para realizar a conversão explícita, coloca-se, antes da expressão a ser convertida, o tipo destino da transformação entre parênteses. Tipo de Origem Tipo de Destino Exemplo int Double int a = 20; double b = a; //nesse caso a conversão é implícita double int double a = 20.1; int b = (int) a; //conversão explícita double float double a = 20.1; float b = (float) a; //conversão explícita long int long a = 20; int b = (long) a; //conversão explícita Adaptado de CARVALHO e TEIXEIRA. Giovany, 2012. Programação Orientada a Objetos I 56 Figura 16: Exemplo de conversão de dados Fonte: CARVALHO e TEIXEIRA, 2012, p.25. Estruturas condicionais A programação em Java bem como a programação em outras linguagens faz uso de estruturas condicionais para a tomada de decisão queafetam o fluxo do programa, desta forma temos a declaração de estruturas específicas que irão tomar essa decisão. Como estruturas condicionais se tem o uso do if, if-else, e switch. Ivan Luiz Marques Ricarte (2001, p. 13), especifica como funciona a estrutura de condicional if. A estrutura if permite especificar um comando (ou bloco de comandos, uma seqüência de expressões delimitada por chaves, { e }) que deve apenas ser executado quando uma determinada condição for satisfeita: if (condição) { bloco_comandos} Quando o bloco de comandos é composto por uma única expressão, as chaves que delimitam o corpo do bloco podem ser omitidas if (condição) expressão; Já a condição if- else permite que seja executado um bloco de comando se verdadeiro e outro se falso. Ivan Luiz Marques Ricarte (2001, p. 14), apresenta a estrutura condicional do if- else. double p=23.3; int i; i= (int)p; // agora compila i= (int) 2.3; // agora compila if (condição) { bloco_comandos_caso_verdade } else { bloco_comandos_caso_falso } Programação Orientada a Objetos I 57 Figura 17: Exemplo programa usando a estrutura if-else Fonte: CARVALHO e TEIXEIRA, 2012, p. 29. A condição switch-case apresenta alternativas de execução, mas apresenta condições de comparação a uma variável. Ivan Luiz Marques Ricarte (2001, p.14), apresenta a estrutura. package pacote1; import java.until.Scanner; public class ExemploIf{ public static void main (String[ ]){ Scanner scan= new Scanner (System.in); System.out.println( “Entre com a nota:”); double nota = Scan.nextDouble ( ); if ( nota<=100 && nota >=0){ System. Out. println ( “Nota= “+nota+” ( valor válido)”); } else{ System.out.println ( “Nota= “+ nota+” (valor invalido) “); } } } switch (variável) { case valor1: bloco_comandos break; case valor2: bloco_comandos break; ... case valorn: bloco_comandos break; default: bloco_comandos } Programação Orientada a Objetos I 58 Figura 18: Exemplo programa usando a estrutura switch case Fonte: CARVALHO, TEIXEIRA, 2012, p.29. Estruturas de Repetição As estruturas de repetição apresentam para a programação loops indeterminadas que representam laços de repetição. As estruturas mais usadas são while, do- while. E também loops determinados que executam um trecho de código por uma quantidade de vezes determinadas, temos nesta modalidade a estrutura for. Para Daniela Barreiro Claro e João Bosco Sobral (2008, p.29), apresenta as a sintaxe das estruturas abaixo: Declaração WHILE: A estrutura while é utilizada quando não se quer que o corpo do laço seja necessariamente package pacote1; public class ExemploSwitchCase{ public static void main( String[ ] args){ int mes; mes=Integer.parseInt(args[0]); switch (mes){ case 1: System.out.println (“Janeiro”); break; case 2: System.out.println (“Fevereiro”); break; case 3: System.out.println (“março”); break; case 4: System.out.println (“Abril”); break; case 5: System.out.println (“Maio”); break; case 6: System.out.println (“Junho”); break; case 7: System.out.println (“Julho”); break; case 8: System.out.println (“agosto”); break; case 9: System.out.println (“Setembro”); break; case 10: System.out.println (“Outubro”); break; case 11: System.out.println (“Novembro”); break; case 12: System.out.println (“Dezembro”); break; default: System.out.println (“Mês Inválido”); } } } Programação Orientada a Objetos I 59 executado. A expressão de comparação é avaliada antes que o laço seja executado. Declaração DO -WHILE: A estrutura do- while é utilizada quando se quer que o corpo do laço seja necessariamente executado, pelo menos uma vez. A expressão de comparação é avaliada depois que o laço for executado. Declaração FOR: A estrutura for fornece uma expressão para inicializar as variáveis, seguida por uma expressão de comparação e depois um lugar para incrementar ou decrementar as variáveis de laço. A declaração pode ser um comando simples ou um bloco de comandos. Para executar a estrutura de repetição while é necessário seguir alguns passos, como afirma Paul Deitel e Harvey Deitel(2017, p.120): 1. uma variável de controle (ou contador de loop). 2. o valor inicial da variável de controle. 3. o incremento pelo qual a variável de controle é modificada a cada passagem pelo loop (também conhecido como cada iteração do loop). 4. a condição de continuação do loop que determina se o loop deve continuar. Figura 19: Programa usando a estrutura de repetição while Fonte: DEITEL, Paul. DEITEL. Harvey, 2017. p120. public class WhileCounter { public static void main(String[ ] args) { int counter =1; // declara e inicializa a variável de controle while ( conter<=10) // condição de continuação do loop { System.out.printf (“%d” , counter); ++counter; // variável de controle de increment } System.out.println( ); } }// fim da classe WhileCounter Programação Orientada a Objetos I 60 A diferença da estrutura do- while para a estrutura while é que se executa pelo menos uma vez o bloco de comandos informado pelo programador. Figura 20: Exemplo programa usando a estrutura do-while Fonte: CARVALHO e TEIXEIRA, 2012, p.30. O comando for executa um laço de repetição, até que o contador seja encerrado. No for há um contador, com uma variável de controle para permitir a execução do bloco de comandos. Figura 21: Componentes do cabeçalho do for Fonte: DEITEL, Paul. DEITEL. Harvey,2017. p122. package pacote1; public class ExemploDoWhile{ public static void main( String[ ] args){ int i=0; do{ System.out.print(i+ “ “); i++; } while (i<=10); System.out.println(); System.out.println(“Acabou”); } } Programação Orientada a Objetos I 61 Figura 22: Exemplo programa usando a estrutura for Fonte: CARVALHO, TEIXEIRA, 2012,p.30. Nesta unidade, tivemos uma introdução à programação orientada a objetos na linguagem de programação Java, assim, conseguimos aplicar os principais conceitos da POO em uma linguagem de programação, na prática. Na unidade a seguir aprenderemos sobre métodos e classes com seus diversos conceitos implícitos. É hora de se avaliar Lembre-se de realizar as atividades desta unidade de estudo. Elas irão ajudá-lo a fixar o conteúdo, além de proporcionar sua autonomia no processo de ensino-aprendizagem. Bons estudos e até a próxima unidade! package pacote1; public class ExemploFor{ public static void main (String[ ] args) { for(int i=0; i<= 10; i++) { System.out.print (i + “ “); } System.out.println( ); System.out.println( “acabou”); } } Programação Orientada a Objetos I 62 Exercícios – Unidade 2 1-A respeito da linguagem Java, avalie as afirmativas a seguir e marque ( V) para verdadeiro ou ( F) para falso. ( ) Todas as variáveis devem ser atribuídas a um tipo quando são declaradas. ( ) Em uma declaração de variáveis, "number" e "NumBER" são consideradas idênticas pelo Java. ( ) O método principal que inicia um programa Java é declarado como "public static void main (String [] args)”. ( ) Os comentários no código fazem com que o computador imprima o texto depois das // na tela quando o programa é executado. A sequência correta é a) V, F, V, F. b) F, V, V, F. c) V, V, F, V. d) F, V, F, V. e) V, F, F, F. 2-A plataforma Java disponibiliza um interpretador que traduz, em tempo de execução, o bytecode para instruções nativas do processador, permitindo, dessa forma, que uma mesma aplicação seja executada em qualquer plataforma computacional que possua essa implementação. Trata-se de: a) Java Virtual Machine. b) Java API c) JavaBeans. d) J2SE. e) JavaFX. Programação Orientada a Objetos I 63 3-Na linguagem Java a) A função Math.round(valor)
Compartilhar