Java: Orientação a Objetos

Page 1

RONNEESLEY MOURA TELES

JAVA: FUNDAMENTOS E ORIENTAÇÃO A OBJETOS

CERES - GO 2022



SUMÁRIO 1

2

INTRODUÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3

1.1 A máquina virtual Java . . . . . . . . . . . . . . . . . . . . . . . . . . .

3

1.2 A plataforma Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4

1.3 Ferramentas ao seu dispor . . . . . . . . . . . . . . . . . . . . . . . . .

5

1.4 Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5

ITENS FUNDAMENTAIS

. . . . . . . . . . . . . . . . . . . . . . . . . . .

9

2.1 Constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

9

2.1.1

Constante numérica . . . . . . . . . . . . . . . . . . . . . . . . . .

9

2.1.2

Constante lógica . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

2.1.3

Constante literal . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

2.2 Variáveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.2.1

Formação dos identificadores . . . . . . . . . . . . . . . . . . . . . 11

2.2.2

Tipos de Dados Primitivos . . . . . . . . . . . . . . . . . . . . . . 12

2.2.3

Declaração de Variáveis . . . . . . . . . . . . . . . . . . . . . . . . 13

2.2.4

Tipos de Variáveis . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

2.3 Comentários . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.3.1

Comentário de Única Linha . . . . . . . . . . . . . . . . . . . . . . 15

2.3.2

Comentário de Múltiplas Linhas

2.3.3

Comentário para Documentação . . . . . . . . . . . . . . . . . . . 15

. . . . . . . . . . . . . . . . . . . 15

2.4 Expressões Aritméticas . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 2.5 Expressões Lógicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 2.5.1

Expressão Relacional . . . . . . . . . . . . . . . . . . . . . . . . . 16

2.5.2

Operadores Lógicos . . . . . . . . . . . . . . . . . . . . . . . . . . 17

2.5.3

Prioridade na Resolução . . . . . . . . . . . . . . . . . . . . . . . . 18

2.6 Expressões Literais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.7 Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3

ORIENTAÇÃO A OBJETOS

. . . . . . . . . . . . . . . . . . . . . . . . . 23

3.1 Objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.2 Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.3 A função principal: main . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.4 Herança . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27


3.5 Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.6 Pacote . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.7 Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 REFERÊNCIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29


1

INTRODUÇÃO A linguagem Java foi lançada em 1995 com o paradigma de programação orientado a

objetos, estruturada e imperativa. Ela foi criada por James Gosling e pela Sun Microsystems. Figura 1 – a James Gosling, o “pai” da linguagem Java; b mascote da linguagem Java. (a) (b)

A principal ideia da linguagem Java era, e continua sendo, que seus programas possam ser executados em diferentes máquinas, sistemas e dispositivos. Dentre os dispositivos encontram-se: computadores pessoais, PDA’s, celulares, televisores e geladeiras. 1.1

A máquina virtual Java Para atingir esse objetivo, a solução foi criar um componente que traduz os códigos Java

para as instruções especı́ficas de cada computador, sistema e dispositivo. Esse componente foi chamado de Máquina Virtual Java (JVM1 ). Assim, a JVM é responsável por carregar e executar os aplicativos Java, convertendo o bytecode em código executável de máquina. Neste caso, chama-se de bytecode o resultado da compilação de um código Java. A figura 2 apresenta esse processo. Figura 2 – Processo de escrita e execução de programas Java.

1

Java Virtual Machine.

3


Deste modo, o processo de desenvolvimento de programas, consiste em escrever um código Java em um arquivo com extensão .java. Esse código é compilado por um programa chamado javac2 . O resultado dessa compilação são arquivos contendo o bytecode com extensão .class. Para iniciar a JVM utiliza-se o programa java que é encarregado de executar o programa. A figura 3 mostra como a portabilidade é garantida pela JVM. Nesta figura é apresentado um primeiro código Java.

Figura 3 – Esquema de portabilidade.

1.2

A plataforma Java O ambiente de hardware ou software que roda um programa Java é chamado de

plataforma Java (ORACLE, 2011), conforme apresentado na figura 4. Ele possui além da própria JVM um conjunto de interfaces de programação de aplicações (API3 )s que provêem várias funções para o desenvolvimento de software. 2 3

Compilador Application Programming Interface.

4


Figura 4 – A API e a JVM formam a plataforma Java.

Devido a existência tanto da JVM quanto da plataforma Java como formas de abstração do código, o desempenho do programa se torna mais lento que um código nativo4 . 1.3

Ferramentas ao seu dispor Além das duas ferramentas já mencionadas para compilar (javac) e rodar o código

(java), existem ferramentas capazes de monitorar, depurar e documentar aplicações. O javadoc é um programa de desenvolvimento capaz de criar uma página HyperText Markup Language (HTML) utilizando apenas o código-fonte do programa. A API do Java inclui diversas funcionalidades, entre elas: representação de objetos, comunicação em redes, tratamento de segurança, geração de arquivos XML e acesso a bancos de dados. Além disso, ainda existem as tecnologias de implantação seja através do Java Web Start ou do Java Plug-In. Em aplicações desktop o Java disponibiliza ferramentas com a biblioteca Swing, Java 2D e JavaFX. Por fim, há diversas bibliotecas como: Java Interface Definition Language (IDL), Java Database Connectivity (JDBC), Java Naming and Directory Interface (JNDI) e Java Remote Method Invocation (Java RMI). 1.4

Exercı́cios

1. Qual o nome do mascote da linguagem Java? 2. Quando a linguagem Java foi lançada? 3. Qual o principal paradigma de programação da linguagem Java? 4

Entende-se por código nativo aquele escrito para uma arquitetura computacional especı́fica.

5


4. Qual a última versão da linguagem Java? 5. Quem criou a linguagem Java? 6. Qual a ideia principal que levou a criação da linguagem Java? 7. Cite dispositivos nos quais um programa Java pode executar. 8. O que significa JVM e qual a sua utilidade? 9. O que é o bytecode? 10. Descreva o processo de compilação e execução de um aplicativo Java. 11. (Windows) Relate o que acontece no passo 11f. a) Crie uma pasta chamada programacao na unidade C: do seu computador; b) Nesta pasta, crie um arquivo chamado HelloWorldApp.java; c) Em seguida, abra-o com o bloco de notas (notepad); d) Redija o código apresentado na figura 3; e) Abra o prompt de comandos (cmd); f) Digite e execute os comandos: i. cd programacao ii. dir iii. javac HelloWorldApp.java iv. dir v. java HelloWorldApp 12. (Linux) Relate o que acontece no passo 12f. a) Crie uma pasta chamada programacao na pasta do seu usuário no seu computador; b) Nesta pasta, crie um arquivo chamado HelloWorldApp.java; c) Em seguida, abra-o com o editor de textos (gedit); d) Redija o código apresentado na figura 3; e) Abra o console (gnome-terminal); 6


f) Digite e execute os comandos: i. cd ˜/programacao ii. ls iii. javac HelloWorldApp.java iv. ls v. java HelloWorldApp

7



2

ITENS FUNDAMENTAIS

2.1

Constantes Constantes são valores fixos que não se modificam com a execução do programa

(tempo). Em Java uma constante pode ser um número, um valor lógico ou uma sequência de caracteres. Conforme o valor que representa são classificadas em: numérica, lógica ou literal. 2.1.1 Constante numérica Em Java as constantes numéricas podem ser representadas em binário, octal, decimal ou hexadecimal. É mais frequente encontrá-las na forma decimal. O Exemplo 2.1 apresenta constantes numéricas e notação decimal. Nota-se que a casa fracionária é separada por um ponto final (notação inglesa), uma vez que no Brasil utiliza-se vı́rgula para separação da parte fracionária. Código 2.1 – Constantes numéricas na notação decimal. 1 2

25 3.14

Na Matemática é comum encontramos números em notação cientı́fica ou multiplicados por uma potência de 10. A linguagem Java também aceita tais representações numéricas. O Exemplo 2.2 apresenta constantes numéricas com potência de 10. Código 2.2 – Constantes numéricas na notação decimal em potência de 10. 1 2

7 . 8 E3 8 . 5 e3

As constantes numéricas podem ser tanto positivas quanto negativas de acordo com o sinal que precede o número. Caso não seja especificado sinal, a constante será positiva. Também se pode utilizar um sinal para o expoente da potência de 10. Este sinal indica o deslocamento da vı́rgula para direita ou para esquerda conforme o sinal seja positivo ou negativo. Código 2.3 – Constantes numéricas positivas e negativa. 1

a ) 15

2

b ) +15

d ) 0 . 3 4 2 g ) −2.5E3 e ) −2.726

j ) 1E4

h ) 2 . 5 E−3

l ) −1E6

9


3

c ) −15

f ) 9 . 7 E6 i ) −0.91E−9 m) −1E−9

Para expecificar números usando a representação binária, octal e hexadecimal é necessário utilizar um prefixo antes no número. A representação binária só foi disponı́vel a partir da Java SE 7 (ORACLE, 2013). O Exemplo 2.4 apresenta o uso destas representações. Código 2.4 – Constantes numéricas na representação binária, octal e hexadecimal. 1

a ) 0 b00100001

2

b ) 0 b1010000101000101

3

c ) 0 b10100001010001011010000101000101

4

d ) 0 xFF EC DE 5E

5

e ) 0xCAFE BABE

6

f) 0x7fff ffff ffff ffffL

7

g ) 032

8

h ) 0 52

9

i ) 05 2

No Exemplo 2.4 as letras a, b, c apresentam números na representação binária, pois eles possuem o prefixo 0b ou 0B. Nas letras d, e, e f, são apresentados números na representação hexadecimal, pois possuem o prefixo 0x ou 0X. As letras g, h e i apresentam números na representação octal, pois possuem o prefixo 0. A partir do Java SE 7 pode-se utilizar o underline ( ) para facilitar a leitura do número. 2.1.2 Constante lógica É um valor lógico, ou seja, só pode assumir valor verdadeiro ou falso. Na linguagem java são representados respectivamente por true e false. São usados para elaboração de expressões lógicas. 2.1.3 Constante literal Existem dois tipos de literais em Java. O primeiro armazena somente um caractere e o segundo armazena uma sequência de caracteres, mas não é um tipo primitivo da linguagem Java. Para representar um único caractere utiliza-se do sı́mbolo apóstofro (’) como delimitador inicial e final. Já para representar uma sequência de caracteres utiliza-se o sı́mbolo aspas 10


(”). O Exemplo 2.5 apresenta caractere nas letras a, b e c, os demais são sequências de caracteres. É importante observar que um número entre aspas é uma constante literal (sequência de caracteres) e não uma constante numérica. Código 2.5 – Constantes literais. 1

a) ’x ’

d ) ”Ana”

g ) ” 123 ”

2

b) ’k ’

e ) ”Bob”

h) ”2”

c) ’ j ’

f ) ” Ronneesley ”

3

2.2

i ) ” 0 x15 ”

Variáveis Uma variável é uma posição de memória cujo conteúdo pode variar durante a execução

do programa. Uma variável pode assumir varios valores ao longo da execução do programa, mas possui somente um valor em um determinado instante. Toda variável tem um nome que também é chamado de identificador. 2.2.1 Formação dos identificadores No momento de dar um nome a uma variável existem dois fatores a se pensar: regras e convenções. As regras são impostas pela linguagem e devem ser seguidas, já as convenções podem ou não serem seguidas e servem para facilitar a legibilidade do código. Na linguagem Java as regras são: 1. todo identificador deve começar com uma letra ou caractere dolar ($) ou um caractere underline ( ); 2. não é permitido a utilização de espaços em branco nos nomes; 3. os caracteres subsequentes do nome podem ser: letras, digitos, sinais de dolar ($) ou o caractere underline ( ); 4. não podem haver duas variáveis com o mesmo identificador; 5. letras maiúsculas diferem de letras minúsculas (sensitive case); 6. o identificador não pode ser uma palavra-chave da linguagem Java. Já as convenções, que podem ou não serem seguidas, são: 11


1. o identificador deve sempre começar com letra; 2. não utilizar o sinal dolar ($); 3. usar nomes completos em vez de siglas complicadas. Isto deixará o código mais legı́vel; 4. se o identificador possuir somente uma letra, conservá-la em minúsculo; 5. se o identificador for composto de palavras, colocar em maiúsculo a primeira letra de cada palavra, exceto a primeira; 6. se é uma constante colocar todas as letras em maiúsculo. Separe cada palavra com o caractere underline ( ); 7. exceto nas constantes, nunca usar o caractere underline ( ). 2.2.2 Tipos de Dados Primitivos Antes de declarar uma variável é necessário saber qual o seu tipo de dado. No algoritmo existem três tipos de dados, são eles: numérico, lógico e literal. No entanto a linguagem Java especifica em mais detalhes estes tipos de dados para evitar o disperdı́cio de memória. A linguagem Java possui oito tipos de dados primitivos, são eles: 1. byte: são 8-bits, de -128 a 127, ou seja, de −27 a 27 − 1; 2. short: são 16-bits, de -32.768 a 32.767, ou seja, de −215 a 215 − 1; 3. int: são 32-bits, de -2.147.483.648 a 2.147.483.647, ou seja, de −231 a 231 − 1; 4. long: são 64-bits, de -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807, ou seja, de −263 a 263 − 1; 5. float: são 32-bits de precisão simples (IEEE 754); 6. double: são 64-bits de precisão dupla; 7. boolean: possui somente dois valores true e false; 8. char: são 16-bits de caractere Unicode. 12


Embora utilizemos em exemplos didáticos os tipos de dados float e double para reprentação de valores monetários, eles não são recomendados para isso, nestas ocasiões recomenda-se o uso da classe java.math.BigDecimal. Note que os tipos byte, short, int e long são representam números do conjunto dos inteiros (Z), ou seja, sem fração. Já os tipos float e double representam o conjunto dos reais (R), ou seja, com fração. No entanto todos eles são subtipos numéricos. Todos tipos numéricos possuem valor padrão 0 no momento em que são declaradas as variáveis. Já o tipo boolean possui valor padrão false e o char o caractere representado pelo valor 0. 2.2.3 Declaração de Variáveis As variáveis só podem armazenar valores de mesmo tipo, ou seja, variável boolean só armazena valores lógicos e assim com todos os demais tipos. É importante ressaltar que deve-se ter atenção aos limites suportados pelo tipo de dado, por exemplo: uma variável de tipo de dado byte não pode armazenar o número 1.000. O tipo de dado da variável é especificado no momento de sua declaração, somente assim a JVM saberá quais valores podem ser armazenados e quanto de espaço de memória reservar. Uma vez declarada a variável, qualquer referência a ela implica na referência do conteúdo da memória que ela representa. O Exemplo 2.6 apresenta a sintaxe geral da declaração de variáveis na linguagem Java, onde: • tipo: é qualquer um dos oito tipos de dados primitivos, uma classe, uma interface ou um enumerador; • identificador: é um nome que segue as regras descritas na seção 2.2.1; • valor: é uma constante que segue as regras decritas na seção 2.1 e possui o mesmo tipo de dado especificado na variável pelo valor tipo. Nota-se que o colchetes no Exemplo 2.6 representa que o valor é opcional, ou seja, pode ou não ser especificado no momento da delcaração. Sempre quando ele aparecer em sintaxes gerais representa a possibilidade de especificá-lo ou não. 13


Código 2.6 – Sintaxe geral da declaração de variáveis. 1

t i p o i d e n t i f i c a d o r [= v a l o r ] ;

2.2.4 Tipos de Variáveis A linguagem Java possui quatro tipos de variáveis. Não confunda-os com tipos de dados, pois representam coisas diferentes. Os tipos de variáveis referem-se ao escopo das variáveis, ou seja, onde serão utilizadas ou de forma indireta quem poderá vê-las. O que determina o escopo das variáveis é o local onde são declaradas. Os quatro tipos de variáveis são: 1. Variável local: existem apenas no bloco de código de um método; 2. Parâmetros: é uma variável que existe somente no bloco de código de um método, porém o seu valor é informado como argumento na chamada dele. Por exemplo o método que calcula o fatorial de um número precisa saber qual número é este, ou seja, este parâmetro é necessário. 3. Variáveis de instância ou não estáticas: são variáveis de um objeto, ou seja, servem para armazenar seus estados em um dado momento da execução do programa; 4. Variáveis de classe ou estáticas: são variáveis pertencentes a classe, ou seja, não importa o número de objetos criados, ela possui somente um valor. Para declará-las utiliza-se a palavra-chave static. Quando não queremos subclassificá-las na prática chamamos de variáveis as variáveis locais ou parâmetros e de atributos as variáveis de instância ou as variáveis de classe.

2.3

Comentários A clareza de um código é essencial (FARRER et al., 1999, p. 32). Ela se refere a

facilidade de entendimento do programa por outra pessoa. Um instrumento que melhora a clareza é o comentário. Um comentário é uma frase com um marcador especial em linguagem natural. Em Java existem três formas de criar comentários: comentário de uma única linha, comentário de múltiplas linhas e comentários para documentação. 14


2.3.1 Comentário de Única Linha Os comentários de uma única linha começam com os caracteres //, ou seja, toda linha que começar com estes caracteres é um comentário. O Exemplo 2.7 apresenta um comentário de uma única linha. Código 2.7 – Sintaxe geral do comentário de uma única linha. 1

// C o m e n tá r i o

2.3.2 Comentário de Múltiplas Linhas O comentário com múltiplas linhas começam com os caracteres /* e terminam com estes caracteres invertidos */. Isto permite que uma descrição mais detalhada do código seja colocada nas múltiplas linhas. O Exemplo 2.8 apresenta um comentário com múltiplas linhas. Código 2.8 – Sintaxe geral do comentário de uma única múltiplas linhas. 1

/∗ C o m e n tá r i o

2 3

∗/

2.3.3 Comentário para Documentação Um comentário para documentação é sintaticamente muito parecido com o comentário de múltiplas linhas. Isto porque ele também permite que sejam descritas várias linhas dentro dele. A diferença essencial é que a abertura é iniciada pelos caracteres /**, ou seja, diferenciando pois possui dois asteriscos. Este tipo de comentário é utilizado para criar documentações a partir da ferramenta javadoc. O Exemplo 2.9 apresenta um comentário para documentação. Nota-se que é comum preencher a coluna do primeiro asterisco com o mesmos caractere nas linhas intermediárias. Código 2.9 – Sintaxe geral do comentário para documentação. 1

/∗ ∗ ∗ Documentação

2 3

∗/

15


2.4

Expressões Aritméticas De acordo com (FARRER et al., 1999, p. 32) “denomina-se expressão aritmética aquela

cujos operadores são aritméticos e cujos operandos são constantes e/ou variáveis do tipo numérico”. As operações aritméticas da linguagem Java são: adição, subtração, multiplicação, divisão, módulo e outras operações binárias que serão descritas adiante. Da mesma forma como acontece no algoritmo, as operações são definidas igualmente na matemática, exceto pelo fato de não poder omitir o operador de multiplicação (FARRER et al., 1999, p. 33). Toda linguagem de programação e até mesmo na Matemática existe uma prioridade entre os operadores. Na linguagem Java a prioridade é apresentada na Tabela 1. Prioridade 1ª 2ª

Operador multiplicação e divisão adição e subtração

Tabela 1 – Prioridade das operações da linguagem Java.

2.5

Expressões Lógicas Em algumas situações é interessante restringir a execução de um conjunto de comandos

a uma condição (FARRER et al., 1999, p. 35). Para definição de condições é necessário criar uma expressão lógica. 2.5.1 Expressão Relacional Chama-se de expressão relacional uma comparação realizada entre dois valores de mesmo tipo de dado (FARRER et al., 1999, p. 35). Os valores podem ser constantes, variáveis ou expressões. Os operadores relacionais da linguagem Java são apresentados na Tabela 2. Operador == != ¿ ¡ ¿= ¡=

Significado igual a diferente de maior que menor que maior ou igual a menor ou igual a

Tabela 2 – Operadores relacionais da linguagem Java. 16


2.5.2 Operadores Lógicos Conjugação, disjunção e negação são os três conectivos definidos pela Álgebra das Proposições. Considera-se uma proposição como sendo uma variável lógica, uma relação ou uma expressão lógica. A Álgebra das Proposições define que é possı́vel criar proposições a partir de outras já conhecidas (FARRER et al., 1999, p. 36). O conectivo e define a conjugação, o conectivo ou a disjunção e o conectivo não a negação (FARRER et al., 1999, p. 36 e 37). A Tabela 3 apresenta estes conectivos e seus equivalentes na linguagem Java. Conectivo e ou não

Operador && —— !

Uso p && q p —— q !p

Tabela 3 – Operadores lógicos da linguagem Java.

Neste sentido os resultados das operações de conjunção e disjunção são apresentadas na Tabela 4. Lembrando da definição, a conjunção de duas proposições é verdadeira se e somente se ambas forem verdadeiras e a disjunção é verdadeira se e somente se pelo menos uma delas for verdadeira (FARRER et al., 1999, p. 36 e 37). p V V F F

q V F V F

p && q V F F F

p —— q V V V F

Tabela 4 – Resultado das operações de conjunção e disjunção utilizando a sintaxe da linguagem Java, dado que as letras V e F representam respectivamente os valores verdadeiro e falso.

O conectivo de negação obtém o valor oposto de um valor lógico. Desta forma se o valor a ser invertido for verdadeiro, logo a negação dele será falso e vice-versa (FARRER et al., 1999, p. 37 e 38). A Tabela 5 apresenta o resultado de uma negação. 17


p V F

!p F V

Tabela 5 – Resultado da operação de negação utilizando a sintaxe da linguagem Java, dado que as letras V e F representam respectivamente os valores verdadeiro e falso. 2.5.3 Prioridade na Resolução Por ser possı́vel possuir mais de um operador lógico na mesma expressão, a ordem que as operações são efetuadas altera o resultado final. A Tabela 6 apresenta esta prioridade (FARRER et al., 1999, p. 38 e 39). Prioridade 1ª 2ª 3ª 4ª 5ª

Operador Aritmético Relacional não e ou

Tabela 6 – Prioridade na resolução de uma expressão lógica.

2.6

Expressões Literais De acordo com (FARRER et al., 1999, p. 39) “expressão literal é aquela formada por

operadores literais e operandos que são constantes e/ou variáveis do tipo literal”. Em algoritmo a única operação apresentada é a concatenação. Na Linguagem Java a concatenação das variáveis literais A e B é executada pelo operador +. Isto resulta em um único valor literal com o conteúdo da variável A seguido com o conteúdo da variável B.

18


2.7

Exercı́cios

1. Identifique cada tipo de constante como numérica, lógica ou literal: a) 21; b) ”Bola”; c) ”Verdadeiro”; d) 0.21E2; e) false. 2. Represente corretamente o: a) volume um litro e meio; b) nome Sebastião; c) caractere y; d) ano atual; e) valor verdadeiro; f) número cem; g) nome Joana h) valor falso; i) caractere k; j) literal verdadeiro; k) número 522 em octal; l) número ffaa em hexadecimal; m) número binário 11000011; 3. Diferencie constantes de variáveis. 4. Diferencie regras e convenções. 5. Quais são as regras na formação de identificadores? 6. Quais são as convenções na formação de identificadores? 19


7. Quais são os oito tipos de dados da linguagem Java? 8. Classifique os oito tipos de dados em numéricos (inteiros e reais), lógicos e literais. 9. Qual a diferença entre os tipos de dado byte, short, int e long? O que há em comum entre eles? 10. Qual a diferença entre os tipos de dado float e double? Eles são recomendáveis para representação monetária? 11. Quais os possı́veis valores uma constante do tipo de dado boolean? 12. Qual o valor padrão das variáveis numéricas? 13. O que deve ser observado entre o valor a ser colocado em uma variável e seu tipo de dado? 14. Qual a sintaxe geral da declaração de variáveis? O que representa os colchetes nela? 15. Quais são os quatro tipos de variáveis? Descreva cada um deles. 16. Quando o tipo de variável especı́fico não é tão relevante, a que se refere o nome variável e o nome atributo? 17. Assinale com um X os identificadores válidos (

) VALOR

(

) SALÁRIO-LÍQUIDO

(

) B248

(

) X2

(

) NOTA*DO*ALUNO

(

) AlB2C3

(

)3x4

(

) MARIA

(

) KM / H

(

) XYZ

(

) NOMEDAEMPRESA

(

) SALA215

(

) ”NOTA”

(

) AH!

(

) M(A)

18. Declare variáveis para armazenar um nome, uma profissão, a idade de uma pessoa e seu salário. 19. Quais os três tipos de comentários e qual a diferença entre eles? 20. Conceitue expressão aritmética. 21. O que é prioridade na resolução de expressões aritmética? Dê exemplos. 22. Quais os dois tipos de expressões lógicas? Qual a diferença entre eles? 20


23. Quais os operadores relacionais da linguagem Java? 24. Quais são os três tipos de operadores lógicos? Explique a função de cada um deles utilizando a sintaxe do conectivo na linguagem Java. 25. Qual a prioridade na resolução de expressões lógicas? 26. Qual operador executa a concatenação de literais na linguagem Java? Dê exemplos.

21



3

ORIENTAÇÃO A OBJETOS A orientação a objetos (OO) é o paradigma mais empregado no desenvolvimento dos

softwares modernos. Isso acontece porque ela facilita a modelagem dos sistemas reais em sistemas computacionais. A linguagem Java é uma das mais utilizadas comercialmente e utiliza esse paradigma de programação nos códigos-fonte que desenvolvemos.

3.1

Objetos Os objetos são a chave para o entendimento da OO. Olhe em volta, quantos objetos

você consegue ver? Exemplos de objetos são seu cachorro, sua mesa, seu televisor, sua bicicleta. Os objetos do mundo real compartilham duas caracterı́sticas em comum: o estado e os comportamentos. Figura 5 – Objetos da vida real. (a) Cachorro.

(c) Lâmpada.

(b) Bicicleta.

(d) Rádio.

A figura 5 apresenta alguns objetos da vida real que servirão de estudo para o entendimento desse conceito na programação. Na tabela 7 são apresentados alguns estados e comportamentos possı́veis para esses objetos. Nota-se que cada software tem objetivos dife23


rentes e isso determina os estados e comportamentos que deverão ser mapeados para resolver os problemas do usuário. Tabela 7 – Estados e comportamentos dos objetos da figura 5. Objeto Estados Comportamentos Cachorro Nome, cor, raça e fome Latir, brincar e abanar cauda Bicicleta Marcha, velocidade Mudar marcha e frear Lâmpada Ligada/desligada Ligar e desligar Rádio Ligado/desligado, volume e estação Ligar, desligar, aumentar volume, diminuir volume, procurar estação e sintonizar

O que varia entre os objetos é a complexidade. Enquanto há objetos bem simples, como uma lâmpada, há outros bem complexos, como um avião. Além disso, alguns objetos podem conter outros objetos, por exemplo, um objeto roupa pode conter um objeto botão. Na programação orientada a objetos (POO) os estados são armazenados nos atributos e os comportamentos são expressos através dos métodos. Estes métodos podem acessar os estados dos objetos e os métodos também servem como um mecanismo de comunicação entre objetos. Um dos princı́pios fundamentais da POO é ocultar os estados dos outros objetos e criar métodos que permitam modificar e ler estes estados. Desta forma, tem-se um controle mais preciso de quem acessou ou modificou cada estado. Este princı́pio é chamado de encapsulamento de dados.

3.2

Classes No mundo real encontramos muitos objetos individuais que são do mesmo tipo como

apresentado na figura 6. Algumas delas partilham do mesmo projeto. Na OO este projeto é chamado de classe e cada objeto dele é chamado de instância. O código 3.1 apresenta como essa classe poderia ser codificada. Para codificação em qualquer linguagem algumas regras e convenções são impostas. Em Java, não é diferente, por isso todo nome de classe começa com letra maiúscula, como: Carro, Cadeira, Sofa e Cliente. No caso de nomes que possuem espaços ou iféns, eles são retirados e coloca-se maiúscula a letra subsequente, como: CarroCorrida e CachorroPastorAlemao. Notase que o nome de classe é um identificador e, portanto, não deve possuir acentos. 24


Figura 6 – Vários objetos da classe bicicleta.

Código 3.1 – Classe bicicleta em Java. 1

class Bicicleta {

2

i n t marcha = 1 ;

3

int velocidade = 0;

4 5

v o i d mudarMarcha ( i n t novaMarcha ) { marcha = novaMarcha ;

6 7

}

8 9

v o i d a u m e n t a r V e l o c i d a d e ( i n t aumento ) { v e l o c i d a d e = v e l o c i d a d e + aumento ;

10 11

}

12 13

void f r e a r ( i n t decremento ) { v e l o c i d a d e = v e l o c i d a d e − decremento ;

14 15

}

16 17 18

void imprimirEstados () { System . o u t . p r i n t l n ( ” Marcha : ” + marcha +

25


” Velocidade : ” + velocidade ) ;

19

}

20 21

}

No código 3.1 é possı́vel visualizar que a palavra-chave utilizada para declarar uma classe é class. Além disso, as linhas 2 e 3 declaram atributos, enquanto as linhas 5 a 20 declaram métodos. Na declaração de atributos, seu tipo de dado é colocado e em seguida vem o identificador. Por exemplo, na linha 2, int é o tipo de dado do atributo nomeado como marcha. Já a declaração de métodos é um pouco mais complexa. Veja por exemplo o método mudarMarcha declarado nas linhas 5 a 7. Primeiramente tem-se o retorno do método, neste caso void, ou seja, o método não retorna nada para quem o chamou, em seguida, vem o nome do método. Após o nome do método tem-se seus parâmetros que são limitados pelo uso dos parênteses. Neste caso, esse método possui somente um parâmetro chamado novaMarcha do tipo inteiro. Quando um método possui mais de um parâmetro eles são separados por vı́rgula (,). Após a definição dos parâmetros, tem-se então a abertura do bloco de código através do uso da chave abrindo ({) e após o código executado pelo método (linha 6), tem-se o fechamento do bloco de código, com a chave fechando (}). 3.3

A função principal: main Para executar qualquer código Java, primeiro deve-se possuir uma classe com o método

main, assim como o código 3.2. Em um projeto só pode haver uma única classe com o método main, pois é ele que dará inı́cio a todo o funcionamento da aplicação1 . Código 3.2 – Aplicação de demonstração da classe Bicicleta. 1 2

c l a s s AplicacaoDemonstracao { p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {

3

// C r i a d o i s o b j e t o s d i f e r e n t e s do t i p o B i c i c l e t a

4

B i c i c l e t a b i c i c l e t a A n a = new B i c i c l e t a ( ) ;

5

B i c i c l e t a b i c i c l e t a B o b = new B i c i c l e t a ( ) ;

6 7 1

// Chamada de métodos d o s o b j e t o s Este é um exemplo de convenção. Convencionou-se que o método main é o método inicial da aplicação, evitando assim que o programador tenha que especificar o método inicial em algum arquivo de configuração.

26


8

b i c i c l e t a A n a . aumentarVelocidade (10) ;

9

b i c i c l e t a A n a . mudarMarcha ( 2 ) ; bicicletaAna . imprimirEstados () ;

10 11 12

b i c i c l e t a B o b . aumentarVelocidade (10) ;

13

b i c i c l e t a B o b . mudarMarcha ( 2 ) ;

14

b i c i c l e t a B o b . aumentarVelocidade (10) ;

15

b i c i c l e t a B o b . mudarMarcha ( 3 ) ;

16

bicicletaBob . imprimirEstados () ; }

17 18

}

O código 3.2 cria duas instâncias da classe Bicicleta nas linhas 4 e 5. Para isso é utilizada a palavra-chave new. Logo a frente desta palavra-chave vem o construtor da classe. O construtor é um método especial que recebe o mesmo nome da classe em questão, podendo ou não fazer configurações logo no momento de criação dos objetos. É interessante ressaltar que quando não declarado explicitamente toda classe possui um construtor sem argumentos. Nas linhas 8 a 16 são apresentados algumas chamadas de métodos. Para realizá-las é preciso colocar o nome do objeto que deseja disparar o comportamento, seguindo de um ponto final, e depois o nome do método desejado, por exemplo, aumentarVelocidade, mudarMarcha e imprimirEstados. 3.4

Herança

3.5

Interface

3.6

Pacote

3.7

Exercı́cios

27



REFERÊNCIAS FARRER, H. et al. Algoritmos Estruturados. Minas Gerais: LTC, 1999. ORACLE. About the Java Technology. 2011. Http://download.oracle.com/javase/tutorial/getStarted/intro/definition.html. ORACLE. Binary Literals. 2013. hhttp://docs.oracle.com/javase/7/docs/technotes/guides/ language/binary-literals.htmli.

29


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.