Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

<p>Linguagem Java – Parte 1</p><p>1º Semestre/2024</p><p>Prof. M.Sc. Stefano B. B. R. P. Mathias</p><p>Linguagem de Programação Orientada a Objeto</p><p>AULA 01</p><p>Objetivos:</p><p>O objetivo desta aula é revisar os</p><p>principais conceitos da linguagem</p><p>Java.</p><p>Tópicos</p><p>• Introdução a linguagem Java;</p><p>• Variáveis;</p><p>• Operadores;</p><p>• Estrutura de decisão;</p><p>Introdução a linguagem Java</p><p>• Java é uma linguagem de programação orientada a objetos lançada</p><p>pela Sun em 1995.</p><p>• Programas Java não são traduzidos diretamente para a linguagem de</p><p>máquina como outras linguagens estaticamente compiladas e sim</p><p>para uma representação intermediária, chamada de bytecode.</p><p>• O bytecode é interpretado pela JVM (Java Virtual Machine), que por</p><p>sua vez traduz para a linguagem de máquina.</p><p>Introdução a linguagem Java (cont...)</p><p>• A JVM possui recursos como o JIT (Just-In-Time Compiler) e o HotSpot</p><p>para melhorar o desempenho do programa Java.</p><p>• Um programa Java é portável para diferentes plataformas.</p><p>• Para o desenvolvimento de programas em Java utiliza-se a JDK (Java</p><p>Development Kit).</p><p>• Para execução de programas Java utiliza-se a JRE (Java Runtime</p><p>Environment), que também engloba a JVM.</p><p>Introdução a linguagem Java (cont...)</p><p>• Toda instrução deve estar dentro de um método, todo método deve</p><p>estar dentro de alguma classe que deve estar em um arquivo com o</p><p>mesmo nome da classe.</p><p>• Por exemplo, o método main está dentro da classe Principal, que por</p><p>sua vez, está no arquivo Principal.java.</p><p>Declaração de variáveis</p><p>• Variáveis podem ser declaradas em qualquer parte do corpo de um</p><p>método.</p><p>• Toda variável precisa de um nome e um tipo de dado.</p><p>Declaração de variáveis: exemplo</p><p>Tipos de dados</p><p>• Os tipos de dados das variáveis em Java podem ser:</p><p>• Primitivos: compreendem os tipos de dados para o armazenamento</p><p>de números inteiros, ponto-flutuante, booleanos e caracteres.</p><p>• Objetos: são definidos por classes, ou seja, possuem atributos e</p><p>métodos.</p><p>Tipos de dados primitivos</p><p>• Existem 8 tipos de dados primitivos em Java.</p><p>• byte: inteiro com sinal, ocupa 8 bits.</p><p>• short: inteiro com sinal, ocupa 16 bits.</p><p>• int: inteiro com sinal, ocupa 32 bits.</p><p>• long: inteiro com sinal, ocupa 64 bits.</p><p>• float: ponto-flutuante, ocupa 32 bits.</p><p>• double: ponto-flutuante, ocupa 64 bits.</p><p>• boolean: assume os valores true ou false.</p><p>• char: um caractere, ocupa 16 bits.</p><p>• Observação: A linguagem não possui um tipo de dado primitivo para</p><p>armazenar um conjunto de caracteres. Neste caso utiliza-se a classe</p><p>String.</p><p>Nomenclatura de variáveis</p><p>• O nome de uma variável devem iniciar com qualquer letra ou os</p><p>caracteres _ e $, não podem iniciar com número.</p><p>• A linguagem é case-sensitive, ou seja, uma letra maiúscula é</p><p>diferente de uma letra minúscula.</p><p>• Exemplos:</p><p>• Válidos: salario, sal_hora, salHora, _desconto, $nome, ano1, cão</p><p>• Inválidos: email@dominio, 1ano</p><p>Boa práticas para nome de variáveis</p><p>• Toda linguagem de programação possui convenções. Não são regras,</p><p>mas são dicas para serem seguidas para deixar o código mais legível.</p><p>• Sempre iniciar o nome de variável em letra minúscula.</p><p>• Não utilizar caracteres especiais e acentuados.</p><p>• Palavras compostas, utilizar o padrão Camel Case:</p><p>• Exemplos: nomeCompleto, notaAluno, cpfAluno, cnpjEmpresa</p><p>• Seguir o padrão independente ser sigla ou não</p><p>Declaração de constantes</p><p>• Informação contida na memória que não pode ser modificado,</p><p>somente é permitido a sua leitura.</p><p>• Os tipos de dados e nomenclatura são os mesmos que as variáveis.</p><p>• Por convenção, sempre definir o nome da constante em UpperCase,</p><p>ou seja, tudo em maiúsculo. No caso de palavras compostas, separar</p><p>com o caractere _</p><p>• Exemplos:</p><p>• final double PI = 3.1416;</p><p>• final int TAMANHO_MAXIMO_CAMPO = 100;</p><p>Conversão implícita de dados</p><p>• A conversão implícita de dados ocorre quando um tipo de dado</p><p>menor é atribuído em um tipo de dado maior.</p><p>• Neste caso não há perda de informação.</p><p>byte  short  int  long  float  double</p><p>Conversão explícita de dados</p><p>• A conversão explícita de dados ocorre quando um tipo de dado maior</p><p>é atribuído em um tipo de dado menor.</p><p>• Neste caso pode haver perda de informação.</p><p>• É necessário fazer o cast</p><p>• O tipo de dado é definido entre parênteses antes do valor.</p><p>double x = 9.345</p><p>int z = (int)x;</p><p>Comentários</p><p>• Servem para documentar o programa, facilitando o seu</p><p>entendimento e manutenção.</p><p>• Hás duas formas:</p><p>• //  Comentário de uma única linha</p><p>• /* ... */  Comentário de várias linhas</p><p>Operadores</p><p>• Os principais tipos de operadores são:</p><p>• Aritméticos: utilizado para dados numéricos.</p><p>• Lógicos: utilizado com dados lógicos (boolean).</p><p>• Literais: utilizado com dados literais (char, string).</p><p>• Relacionais: utilizado para comparar dados de mesmo tipo, produzindo um resultado</p><p>lógico (verdadeiro ou falso).</p><p>Operadores aritméticos</p><p>Operação Java Precedência</p><p>Multiplicação * 1</p><p>Divisão / 1</p><p>Módulo (Resto divisão) X % Y 1</p><p>Adição + 2</p><p>Subtração – 2</p><p>Precedência de operadores: exemplos</p><p>5 * 2 – 3 + 14 / 2 + 9</p><p>10 – 3 + 7 + 9</p><p>23</p><p>------------------------------------------------------------</p><p>5 – 3 % 2 + 4 – 2 * 2</p><p>5 – 1 + 4 – 4</p><p>4</p><p>------------------------------------------------------------</p><p>(3 – 1) * 2 – 7 + (2 + 1) * 2</p><p>2 * 2 – 7 + 3 * 2</p><p>4 – 7 + 6</p><p>3</p><p>– –</p><p>Pré e pós-incremento e decremento</p><p>• Incremento: soma 1 à variável</p><p>• Decremento: subtrai 1 da variável</p><p>– –</p><p>++</p><p>++</p><p>Operador</p><p>– – aPré-decremento</p><p>a ++Pós-incremento</p><p>a – –Pós-decremento</p><p>++ aPré-incremento</p><p>ExemploNome</p><p>Pré e pós-incremento e decremento (cont…)</p><p>• Exemplos:</p><p>• a++  a = a + 1</p><p>• b--  b = b - 1</p><p>Pré e pós-incremento e decremento (cont…)</p><p>• Qual o valor de b e c no final do algoritmo?</p><p>int a = 10;</p><p>int b = a++;</p><p>int c = ++a;</p><p>Pré e pós-incremento e decremento (cont…)</p><p>• Qual o valor de b e c no final do algoritmo?</p><p>int a = 10;</p><p>int b = a++;</p><p>int c = ++a;</p><p>• O valor será:</p><p>• b = 10</p><p>• c = 12</p><p>Operadores de atribuição</p><p>Operação Java</p><p>Multiplicação *=</p><p>Divisão /=</p><p>Módulo (Resto divisão) %=</p><p>Adição +=</p><p>Subtração –=</p><p>Operadores de atribuição (cont…)</p><p>• Exemplos:</p><p>a = a + 2  a += 2</p><p>b = b – 3  b -= 3</p><p>c = c * 5  c *= 5</p><p>d = d / 4  d /= 4</p><p>e = e % 2  e %= 2</p><p>Operadores literais</p><p>• Concatenação: junção de dados literais.</p><p>• Operador +</p><p>String nome = “Fulano”;</p><p>System.out.println(“Nome = ” + nome);</p><p>int x = 5;</p><p>System.out.println(“o valor de X é ” + x);</p><p>• Obs.: A concatenação converte os operandos não literais em literais.</p><p>Operadores lógicos</p><p>!NÃO</p><p>||OU</p><p>&&E</p><p>Equivalente em</p><p>Java</p><p>Operador lógico</p><p>Operadores lógicos (cont...)</p><p>Operadores relacionais</p><p>• São utilizados para comparar operandos do mesmo tipo.</p><p>• Sempre retornam valores lógicos.</p><p>Precedência de operadores</p><p>Precedência de operadores</p><p>Boas práticas de programação</p><p>• Analisar a tabela de precedência.</p><p>• Usar parêntesis em expressões mais complexas para facilitar a</p><p>leitura.</p><p>• Usar pré/pós incremento/decremento (++ e --) sozinhos.</p><p>• Ou seja: EVITAR o uso em expressões complexas!</p><p>Erros comuns de programação</p><p>• Confundir</p><p>• = (Atribuição)</p><p>• == (Igualdade relacional)</p><p>• Sintaxe de operadores</p><p>• != e não =!</p><p>• > = com um espaço em branco entre o > e o =</p><p>• Ordem de avaliação</p><p>• a + b / 2 é diferente de (a + b) / 2</p><p>• “y + 2 = ” + y + 2 é diferente de “y + 2 = ” + (y + 2)</p><p>Estrutura de decisão (IF / ELSE)</p><p>• Pode-se omitir o parênteses quando há apenas uma instrução no</p><p>bloco.</p><p>if ()</p><p>;</p><p>if ()</p><p>{</p><p>;</p><p>...</p><p>;</p><p>}</p><p>if (;</p><p>else</p><p>;</p><p>if (expr1)</p><p>{</p><p>}</p><p>else if (expr2)</p><p>{</p><p>}</p><p>else</p><p>{</p><p>}</p><p>Operador ternário</p><p>• Forma compacta de se escrever uma condição composta.</p><p>• ? :</p><p>• Exemplo: a partir da média do aluno, informe se a situação do aluno</p><p>é aprovado ou reprovado.</p><p>double media = Double.parseDouble(</p><p>JOptionPane.showInputDialog("Informe a média do aluno"));</p><p>String situacao = media >= 6 ? "Aprovado" : "Reprovado";</p><p>JOptionPane.showMessageDialog(null, situacao);</p><p>Comando switch</p><p>switch(</p><p>ou variável)</p><p>{</p><p>case : ;</p><p>break;</p><p>case : ;</p><p>break;</p><p>...</p><p>case : ;</p><p>break;</p><p>default: ;</p><p>break;</p><p>}</p><p>Comando switch - exemplo</p><p>import javax.swing.*;</p><p>public class Exemplo1</p><p>{</p><p>public static void main(String args[])</p><p>{</p><p>int mes = Integer.parseInt(</p><p>JOptionPane.showInputDialog(“Digite o mês”));</p><p>switch (mes)</p><p>{</p><p>case 1: System.out.println(“Janeiro”);</p><p>break;</p><p>case 2: System.out.println(“Fevereiro”);</p><p>break;</p><p>...</p><p>case 12: System.out.println(“Dezembro”);</p><p>break;</p><p>default: System.out.println(“Mês inválido”);</p><p>break;</p><p>}</p><p>}</p><p>}</p><p>Referências</p><p>• Tipos primitivos do Java com os ranges:</p><p>https://www.w3schools.com/java/java_data_types.asp</p><p>Linguagem Java – Parte 2</p><p>1º Semestre/2024</p><p>Prof. M.Sc. Stefano B. B. R. P. Mathias</p><p>Linguagem de Programação Orientada a Objeto</p><p>AULA 02</p><p>Objetivos:</p><p>O objetivo desta aula é revisar os</p><p>principais conceitos da linguagem</p><p>Java.</p><p>Tópicos</p><p>• Estrutura de repetição;</p><p>• Entrada e saída de dados;</p><p>• Vetores e Matrizes.</p><p>O bloco de comandos é executado enquanto a condição for verdadeira.</p><p>Estrutura de repetição (while)</p><p>while(</p><p>)</p><p>;</p><p>while(</p><p>)</p><p>{</p><p>;</p><p>}</p><p>Estrutura de repetição (while) - Exemplo</p><p>import javax.swing.*;</p><p>public class Validacao</p><p>{</p><p>public static void main(String args[])</p><p>{</p><p>int numero;</p><p>numero = Integer.parseInt(JOptionPane.showInputDialog(</p><p>“Digite um número”));</p><p>while (numero</p><p>while ();</p><p>do</p><p>{</p><p>;</p><p>}while</p><p>();</p><p>Estrutura de repetição (do/while) - Exemplo</p><p>import javax.swing.*;</p><p>public class Confirmacao</p><p>{</p><p>public static void main(String args[])</p><p>{</p><p>char cResp;</p><p>do</p><p>{</p><p>// comandos</p><p>...</p><p>cResp = JOptionPane.showInputDialog(</p><p>“Deseja continuar?(S/N)”).charAt(0);</p><p>} while (cResp == ‘S’);</p><p>}</p><p>}</p><p>Comparação entre while e do/while</p><p>• while</p><p>Requer que a condição seja verdadeira para que os comandos do laço</p><p>sejam executados ao menos uma vez.</p><p>• do/while</p><p>Primeiro executa os comandos do laço para, no final, verificar se a</p><p>condição é verdadeira ou não.</p><p>Estrutura de repetição (for)</p><p>Java</p><p>for ( = ; ; cont++)</p><p>{</p><p>}</p><p>Estrutura de repetição (for) - Exemplo</p><p>import javax.swing.*;</p><p>public class Exemplo1</p><p>{</p><p>public static void main(String args[])</p><p>{</p><p>int i;</p><p>for (i = 1 ; i )</p><p>{</p><p>continue; // “pula” apenas essa iteração do laço</p><p>}</p><p>System.out.println(i);</p><p>}</p><p>Comando break</p><p>Finaliza o laço e transfere o controle do fluxo de execução para o</p><p>comando imediatamente seguinte ao laço.</p><p>Exemplo:</p><p>int i;</p><p>for (i = 1 ; i )</p><p>{</p><p>break; // sai do laço</p><p>}</p><p>System.out.println(i);</p><p>}</p><p>Saída de dados</p><p>• Exibir mensagens para o usuário final.</p><p>• Janela de diálogo</p><p>import javax.swing.JOptionPane;</p><p>JOptionPane.showMessageDialog(null, “Mensagem”);</p><p>• Linha de comando (Prompt DOS)</p><p>System.out.print(“Mensagem sem quebra”);</p><p>System.out.println(“Mensagem com quebra”);</p><p>Entrada de dados</p><p>• Ler informações digitadas pelo usuário final.</p><p>• Janela de diálogo</p><p>import javax.swing.JOptionPane;</p><p>String valor = JOptionPane.showInputDialog(“Mensagem”);</p><p>Entrada de dados (Cont…)</p><p>• Linha de comando (Prompt DOS)</p><p>import java.util.Scanner;</p><p>Scanner scanner = new Scanner(System.in);</p><p>String s = scanner.nextLine();</p><p>double a = scanner.nextDouble();</p><p>int b = scanner.nextInt();</p><p>scanner.close();</p><p>Entrada de dados (Cont…)</p><p>package teste;</p><p>import java.util.Scanner;</p><p>public class Teste {</p><p>public static void main(String[] args) {</p><p>Scanner scanner = new Scanner(System.in);</p><p>System.out.print("Digite o seu nome: ");</p><p>String nome = scanner.nextLine();</p><p>System.out.println("Bem vindo " + nome + "!!");</p><p>scanner.close();</p><p>}</p><p>}</p><p>Vetores</p><p>• Declaração:</p><p>tipo[] nome; OU tipo nome[];</p><p>• Construção:</p><p>nome = new tipo[tamanho];</p><p>• Declaração e construção:</p><p>tipo[] nome = new tipo[tamanho];</p><p> Exemplo:</p><p>int[] vetor = new int[100];</p><p>Vetores - Exemplo</p><p>import javax.swing.*;</p><p>public class EntradaVetor</p><p>{</p><p>public static void main(String args[])</p><p>{</p><p>String nomes[] = new String[20];</p><p>int i;</p><p>for (i = 0; i</p><p>a Orientação a Objetos.</p><p>• Atualmente temos linguagens como o Java, c#, Phyton,</p><p>Object Pascal, todas Orientadas a Objeto.</p><p>Resumo histórico (cont...)</p><p>• A programação estruturada diz que todos os</p><p>programas de computador podem ser</p><p>reduzidos a apenas três estruturas:</p><p>sequência, decisão e iteração.</p><p>• Na prática, a programação estruturada virou a</p><p>programação modular. Os desenvolvedores</p><p>deviam criar estruturas simples em seus</p><p>programas, utilizando sub rotinas e funções.</p><p>• Mesmo tendo sido sucedida pela</p><p>Programação Orientada a Objetos, a</p><p>programação estruturada ainda é relevante,</p><p>pois grande parte das pessoas aprendem a</p><p>programar por meio dela.</p><p>Tipos de Programação</p><p>• A programação linear é utilizada para resolver problemas de</p><p>otimização. Cada problema é modelado por uma função objetivo e</p><p>restrições lineares.</p><p>• Exemplo¹:</p><p>• Para construir uma casa popular por mês, uma construtora precisa de 2</p><p>pedreiros e 4 serventes. Para construir um apartamento no mesmo</p><p>intervalo de tempo, a mesma construtora necessita de 3 pedreiros e 8</p><p>serventes.</p><p>• A construtora possui um total de 30 pedreiros e 70 serventes contratados.</p><p>• A construtora obtém um lucro de R$ 3.000,00 na venda de cada casa e de</p><p>R$ 5.000,00 na venda de cada apartamento e toda "produção" da</p><p>construtora é vendida.</p><p>¹ - retirado de: https://www.ufjf.br/epd015/files/2010/06/IntrodPL.pdf</p><p>Tipos de Programação (cont...)</p><p>• Qual é a quantidade ótima de casas e apartamentos que a</p><p>construtora deve construir para que está obtenha lucro máximo?</p><p>• Função objetivo:</p><p>• Solução ideal:</p><p>Tipos de Programação (cont...)</p><p>• Programação Orientada a Objetos (POO) ou Object-Oriented</p><p>Programming (OOP) é um paradigma de análise, projeto e</p><p>programação de software baseado em abstração, composição e</p><p>interação entre diversas unidades software chamado objeto.</p><p>• Allan Kay é um dos pais dos conceitos de POO.</p><p>“O computador ideal deve funcionar como um organismo vivo, cada célula se</p><p>relaciona com outras a fim de alcançar um objetivo, mas cada uma funciona de</p><p>forma autônoma. As células poderiam também reagrupar-se para resolver um</p><p>outro problema ou desempenhar outras funções.”</p><p>Tipos de Programação (cont...)</p><p>• Daqui em diante, em cada aula será apresentado um conceito de</p><p>orientação objeto para que vocês consigam programar dessa</p><p>maneira.</p><p>• Inicialmente os programas construídos por vocês estão utilizando a</p><p>programação estruturada.</p><p>• Para iniciar o entendimento de POO, é necessário compreender que</p><p>um objeto é um tipo de variável que o programador pode definir.</p><p>Esse objeto pode possuir características, comportamentos e</p><p>estados.</p><p>Programação Orientada a Objetos</p><p>• Um exemplo: com o que conhecemos de programação em Java até</p><p>aqui, se fossemos criar um programa que receba o modelo e o ano</p><p>de um carro, faríamos da seguinte forma:</p><p>Programação Orientada a Objetos (cont..)</p><p>• Para transformar esse código em Orientado a Objeto, primeiro é</p><p>necessário criar uma classe Carro.</p><p>• Na sequência, é possível declarar uma variável do tipo Carro.</p><p>Programação Orientada a Objetos (cont..)</p><p>• Modularidade: uma vez criado, um objeto pode ser utilizado por</p><p>todo o sistema;</p><p>• Encapsulamento: detalhes de implementação ficam ocultos</p><p>externamente ao objeto;</p><p>• Reuso: uma vez criado, um objeto pode ser utilizado em outros</p><p>programas;</p><p>• Manutenibilidade: a manutenção é realizada em pontos específicos</p><p>do seu programa (objetos).</p><p>Vantagens da POO</p><p>• A execução de aplicações Orientadas a Objeto é mais lenta do que a</p><p>de aplicações com programação estruturada, pois existe</p><p>complexidade no modelo que traz representações em forma de</p><p>classes;</p><p>• No momento tecnológico que estamos, essa lentidão não é</p><p>percebida pelo desenvolvedor e nem pelo usuário do software.</p><p>• Desde que o desenvolvedor não construa algo extremamente lento a ponto</p><p>dessa lentidão ser perceptível.</p><p>Desvantagens da POO</p><p>• Quando vamos criar um programa para resolver algum problema,</p><p>precisamos entender quais objetos são necessários para realizar</p><p>essa modelagem.</p><p>• Nesse momento precisamos abstrair esse objeto e colhermos</p><p>somente as características necessárias deste para a solução do</p><p>problema em questão.</p><p>• Como percebemos o mundo a nossa volta?</p><p>• Através dos 5 sentidos</p><p>Identificando um objeto</p><p>• Como reconhecemos um objeto?</p><p>• Por meio de padrões que percebemos</p><p>• Saber o nome e para que serve</p><p>• Ele possui características?</p><p>• Apresenta um ou mais comportamentos?</p><p>• Possui um estado em algum momento?</p><p>Identificando um objeto (cont...)</p><p>• Exemplo: considere um sistema para uma clínica veterinária para</p><p>cães.</p><p>Identificando um objeto (cont...)</p><p>• Quais são as informações necessárias</p><p>a serem armazenadas dos cães ao</p><p>lado?</p><p>• Idade, raça, dono, se possui filhotes,</p><p>nome dos pais etc.</p><p>Referências</p><p>• Timeline com as linguagens de programação:</p><p>https://en.wikipedia.org/wiki/Timeline_of_programming_languages</p><p>• Introdução a Programação linear:</p><p>https://www.ufjf.br/epd015/files/2010/06/IntrodPL.pdf</p><p>Classes, Atributos e Métodos</p><p>1º Semestre/2024</p><p>Prof. M.Sc. Stefano B. B. R. P. Mathias</p><p>Linguagem de Programação Orientada a Objeto</p><p>AULA 04</p><p>Objetivos:</p><p>O objetivo desta aula é apresentar os</p><p>conceitos de classe, atributo e</p><p>método.</p><p>• Introdução</p><p>• Classe</p><p>• Atributo</p><p>• Método</p><p>• Boas práticas para definição de nomes</p><p>• Pacotes</p><p>Tópicos</p><p>• Implementação no Java</p><p>• Objetos e referências</p><p>• Valor inicial para atributos.</p><p>Tópicos (cont...)</p><p>• Na aula passada foi apresentado um pouco do contexto histórico</p><p>das linguagens de programação, até chegarmos no paradigma da</p><p>Orientação a Objeto.</p><p>• Na aula de hoje iremos focar nos conceitos de Classe, Atributos e</p><p>Métodos.</p><p>Introdução</p><p>• “Uma classe é uma descrição que abstrai um conjunto de objetos</p><p>com características similares. De maneira formal, é um conceito</p><p>que encapsula abstrações de dados e procedimentos que</p><p>descrevem o conteúdo e comportamento de entidades do mundo</p><p>real, representadas por objetos.” Pressman e Maxim (2016)</p><p>• Uma classe é utilizada como um tipo de dado. Logo, é possível criar</p><p>variáveis cujo tipo de dado seja a própria classe.</p><p>Classe</p><p>Classe (cont...)</p><p>Abstração</p><p>Classe</p><p>• Considerando o slide do exemplo anterior, o conjunto de objetos é</p><p>formado por casas. Mesmo que cada objeto seja diferente (um</p><p>prédio, uma casa térrea e uma casa com dois andares) é necessário</p><p>abstrair as características necessárias para a construção da classe.</p><p>• Essa abstração envolve observar e obter somente as características</p><p>necessárias que todos os objetos possuem para a criação da classe.</p><p>• As características necessárias variam de acordo com cada problema</p><p>que estamos a resolver.</p><p>Classe (cont...)</p><p>• Continuando com o exemplo das casas, considere que será</p><p>desenvolvido um sistema para uma imobiliária. Logo, devemos</p><p>pensar um uma classe CASA que possua todas as características</p><p>necessárias para tal.</p><p>• Em POO, cada uma das características de um objeto é chamada de</p><p>atributo.</p><p>• Um atributo consiste em um dado ou uma informação de estado,</p><p>para o qual cada objeto de uma classe possui o seu próprio valor.</p><p>Existem dois tipos de atributos em um sistema OO: os atributos de</p><p>classes e os atributos de objetos.</p><p>Atributo</p><p>• Os atributos de classes são aqueles cujos valores todos os seus</p><p>objetos irão compartilhar. Já os atributos de objetos descrevem os</p><p>valores (ou estados) mantidos em um objeto.</p><p>• Diferentes objetos de uma mesma classe não compartilham os</p><p>atributos de objetos, ou seja, cada um possui a sua própria cópia do</p><p>atributo.</p><p>• Voltando ao exemplo utilizado anteriormente, as características</p><p>necessárias para modelar um objeto CASA são: número de quartos,</p><p>número de banheiros, quantidade de vagas de garagem, tipo de</p><p>casa, se possui sala, se possui cozinha, proprietário etc.</p><p>Atributo (cont...)</p><p>• Existem muitos outros atributos que podem ser atribuídos à classe</p><p>CASA, mas eles são necessários no contexto de uma imobiliária.</p><p>• Exemplo: marca do piso da cozinha, cor do rejunte do banheiro,</p><p>marca do encanamento utilizado nos cômodos da casa, nome da</p><p>madeira utilizada nas portas, espessura</p><p>do vidro das janelas,</p><p>quantidade de telhas do telhado etc.</p><p>Atributo (cont...)</p><p>• É similar a um procedimento ou a uma função. Consiste na</p><p>descrição das operações que um objeto executa quando recebe</p><p>uma mensagem.</p><p>• Uma mensagem é um sinal enviado de um objeto para outro, no</p><p>qual um objeto requisita algo a outro, usando uma operação</p><p>existente no objeto chamado. Cada mensagem pode ser</p><p>acompanhada de informações adicionais (os argumentos). (Timothy</p><p>Budd, 1991)</p><p>Método</p><p>• Os métodos fornecem comportamentos aos objetos. Quando</p><p>estamos falando a nível de classe, é correto afirmar que ela possui</p><p>operações.</p><p>• No exemplo da imobiliária, podemos criar as seguintes operações</p><p>na classe CASA: alugar, vender, renovar contrato, aumentar o</p><p>aluguel, verificar se o proprietário possui interesse em vender etc.</p><p>Método (cont...)</p><p>Boas práticas para definição de nomes</p><p>• Nome de classes: utilizar a primeira letra em maiúsculo e o restante</p><p>em minúsculo. Em caso de palavras compostas definir o primeiro</p><p>caractere de cada palavra em maiúsculo:</p><p>• Exemplos: Livro, Carro, CurriculoAluno.</p><p>• Nome de atributos e métodos: definir o nome em minúsculo. Em</p><p>caso de palavras compostas definir o primeiro caractere de cada</p><p>palavra em maiúsculo, a partir da segunda palavra.</p><p>• Exemplos de atributo: isbn, titulo, numeroPaginas.</p><p>• Exemplos de métodos: imprimirRelatorio, gravar.</p><p>Pacotes</p><p>• As classes em Java são organizadas dentro de pacotes.</p><p>• Para definir o nome do pacote de determinada classe, no início do</p><p>arquivo, se utiliza a instrução package.</p><p>• E para utilizar classes que estão em pacotes diferentes da classe</p><p>atual, utiliza-se a instrução import.</p><p>• Ao utilizar o import é possível definir uma classe específica, ou pode-se</p><p>utilizar o caractere * que representa todas as classes de determinado pacote.</p><p>Pacotes (cont…)</p><p>• Por definição, sugere-se que o nome do pacote seja igual ao domínio</p><p>da instituição / empresa. Porém, em ordem inversa.</p><p>• Por exemplo: o domínio da faculdade UNIP é unip.br.</p><p>• Neste caso o pacote seria br.unip.</p><p>• Para implementar uma classe no Java, devemos criar um novo</p><p>arquivo. No NetBeans, basta clicar com o botão direito e selecionar</p><p>a opção “Novo -> Classe Java...”</p><p>• No novo arquivo, para cada propriedade, basta declarar uma</p><p>variável com algum tipo primitivo (depois veremos que podemos</p><p>utilizar outra classe também) e colocar o nome que melhor</p><p>descreve essa característica.</p><p>• Para cada comportamento, criamos uma “função” dentro da classe</p><p>e também colocamos um nome que melhor descreve aquele</p><p>comportamento.</p><p>Implementação no Java</p><p>Implementação no Java (cont...)</p><p>Implementação no Java (cont...)</p><p>Objetos e referências</p><p>• Uma variável cujo tipo é uma classe não guarda diretamente o</p><p>objeto.</p><p>• A variável guarda uma referência ao objeto.</p><p>• O new aloca uma área de memória e retorna a referência da área de</p><p>memória alocada.</p><p>Valor inicial para atributos</p><p>• Os atributos de uma classe são inicializados automaticamente por um</p><p>valor padrão, mas podemos atribuir outros valores de inicialização na</p><p>sua declaração.</p><p>• Os valores padrão são:</p><p>• boolean: false</p><p>• char: ‘\u0000’</p><p>• byte, short, int e long: 0</p><p>• float e double: 0.0</p><p>• referência a objeto: null</p><p>Referências</p><p>• Roger Pressman, Bruce Maxim (2016). Engenharia de Software 8 ed.</p><p>[S.l.]: McGraw Hill Brasil.</p><p>• Timonthy Budd (2001). An introduction to object-oriented</p><p>programming 3 ed. Pearson.</p><p>Modificadores de Acesso e</p><p>Encapsulamento</p><p>1º Semestre/2024</p><p>Prof. M. Sc. Stefano B. B. R. P. Mathias</p><p>Linguagem de Programação Orientada a Objeto</p><p>AULA 05</p><p>Objetivos:</p><p>O objetivo desta aula é aprender mais</p><p>sobre métodos e encapsulamento.</p><p>• Introdução</p><p>• Modificadores de acesso</p><p>• Métodos getters e setters</p><p>• Sobrecarga de métodos</p><p>• Atributos e métodos estáticos</p><p>Tópicos</p><p>Introdução</p><p>• Na aula de hoje iremos aprender um dos pilares da POO, o</p><p>encapsulamento.</p><p>• Em programação, encapsular é o processo utilizado para esconder os</p><p>detalhes internos de funcionamento de uma classe, tornando as</p><p>partes de um sistema as mais independentes possíveis.</p><p>• Por conta do encapsulamento, o conhecimento a respeito da</p><p>implementação interna da classe é desnecessário do ponto de vista</p><p>do objeto, pois isso passa a ser de responsabilidade dos métodos da</p><p>classe.</p><p>Introdução (cont...)</p><p>• Outra vantagem de se utilizar o encapsulamento é evitar que um</p><p>objeto sofra acessos indevidos. Para isso, são criados métodos que</p><p>podem ser utilizados por qualquer outra classe, sem causar</p><p>inconsistências nos dados da mesma.</p><p>Introdução (cont...)</p><p>• Depois de aplicar o encapsulamento, o exemplo do slide anterior</p><p>ficou assim:</p><p>Modificadores de acesso</p><p>• O acesso a atributos e métodos é restringido através do uso de</p><p>modificadores.</p><p>• Encapsular é esconder detalhes de funcionamento do programa.</p><p>• Alguns modificadores:</p><p>• private: Visível apenas para a classe que o declara.</p><p>• public: Visível a todas as classes.</p><p>Atributos e métodos</p><p>• Marcar um atributo ou método como private esconde o atributo de</p><p>quem usa a classe.</p><p>• É interessante marcar métodos como private quando este é um</p><p>método auxiliar da classe, que não deve ser acessível externamente.</p><p>Atributos e métodos (cont…)</p><p>public class Livro {</p><p>private String isbn;</p><p>private int numPaginas;</p><p>public void emprestar(Cliente c) {</p><p>...</p><p>}</p><p>public void devolver() {</p><p>...</p><p>}</p><p>}</p><p>Atributos</p><p>Métodos</p><p>Atributos e métodos (cont…)</p><p>• Apesar de não ser regra, normalmente:</p><p>• Atributos são declarados como private</p><p>• Métodos são declarados como public</p><p>• Esta abordagem faz sentido, já que o ideal é que objetos colaborem</p><p>através de troca de mensagens (chamadas de métodos), e não</p><p>através da manipulação direta de atributos.</p><p>Classes</p><p>• Quase sempre, classes também são declaradas como public.</p><p>• Apenas uma classe definida como public pode existir num arquivo Java.</p><p>• O nome do arquivo deve ser igual ao nome da classe definida como public.</p><p>Métodos getters e setters</p><p>• Quando os atributos são declarados como private, os métodos</p><p>getters e setters podem ser utilizados.</p><p>• Getters</p><p>• Usados para expor os valores dos atributos.</p><p>• Setters</p><p>• Usados para alterar os valores de atributos.</p><p>Métodos getters e setters (cont…)</p><p>public class Livro {</p><p>private int numPaginas;</p><p>public String getNumPaginas() {</p><p>return this.numPaginas;</p><p>}</p><p>public void setNumPaginas(int numPaginas) {</p><p>this.numPaginas = numPaginas;</p><p>}</p><p>}</p><p>Atributo</p><p>Métodos</p><p>getters e</p><p>setters</p><p>Métodos getters e setters (cont…)</p><p>• Protegem os atributos.</p><p>• Evitam a mudança de código em vários lugares.</p><p>• Possibilita tratamentos específicos na atribuição e retorno do valor</p><p>dos atributos.</p><p>• Por boas práticas, utilize getters e setters para atributos, definindo os</p><p>atributos como private.</p><p>Operador this</p><p>• Representa a referência do objeto da instância atual.</p><p>• Normalmente não é obrigatório.</p><p>• Utilizado basicamente em duas situações:</p><p>• Diferenciar um atributo do objeto de um argumento / parâmetro do método.</p><p>• Fornecer a referência do próprio objeto para outro método.</p><p>Operador this (cont…)</p><p>public class Livro {</p><p>private int numPaginas;</p><p>public void setNumPaginas(int numPaginas) {</p><p>this.numPaginas = numPaginas;</p><p>}</p><p>}</p><p>Atributo da classe</p><p>Parâmetro</p><p>do método</p><p>Modificador protected</p><p>• Além dos modificadores public e private, existe também o</p><p>modificador protected.</p><p>• Quando definido como protected, atributos e métodos possuem o</p><p>seguinte comportamento:</p><p>• Dentro do mesmo pacote, possuem o mesmo comportamento do public.</p><p>• Para pacotes diferentes da classe, possuem o comportamento do private.</p><p>• Se não definido o modificador de acesso de um atributo, por padrão</p><p>será protected.</p><p>Sobrecarga de métodos</p><p>• Sobrecarregar um método significa criar outros métodos com o</p><p>mesmo nome, mas com assinatura diferente.</p><p>• Métodos com assinaturas diferentes são métodos com parâmetros</p><p>diferentes. Quantidade e tipos diferentes.</p><p>void reservar(int dias)</p><p>int reservar(Date data)</p><p>void reservar(Cliente c, Date data)</p><p>(int)</p><p>(Date)</p><p>(Cliente, Date)</p><p>Sobrecarga de métodos (cont…)</p><p>• De acordo com os parâmetros</p><p>informados o Java sabe qual método</p><p>deverá ser executado.</p><p>• Dica: é possível um método chamar outro método para evitar</p><p>duplicação de código.</p><p>Atributos e métodos estáticos</p><p>• Algumas vezes, atributos e / ou métodos podem não estar atrelados</p><p>a um objeto específico, mas sim à classe.</p><p>• Atributos ou métodos da classe são assim definidos através do</p><p>modificador static.</p><p>Atributos e métodos estáticos (cont…)</p><p>• Os valores dos atributos estáticos são compartilhados por todas as</p><p>instâncias da classe.</p><p>• Métodos estáticos só podem acessar atributos ou outros métodos</p><p>que também são estáticos.</p><p>public class Exemplo {</p><p>private static String valor = “Atributo estático”;</p><p>public static String getValor() {</p><p>return valor;</p><p>}</p><p>}</p><p>Atributos e métodos estáticos (cont…)</p><p>• Para acessar um método estático, utiliza-se o nome da classe. Não é</p><p>necessário criar um objeto.</p><p>public class Exemplo {</p><p>private static String valor = “Atributo estático”;</p><p>public static String getValor() {</p><p>return valor;</p><p>}</p><p>}</p><p>public class Principal {</p><p>public static void main(String[] args) {</p><p>String valor = Exemplo.getValor();</p><p>}</p><p>}</p><p>Atributos e métodos estáticos (cont…)</p><p>• Atributos estáticos são uma forma bastante utilizada para criar</p><p>constantes no Java.</p><p>public class Constantes {</p><p>public static final int VERSAO = 1;</p><p>}</p><p>Exemplos de classes estáticas no Java</p><p>• System.out</p><p>public class Principal {</p><p>public static void main(String[] args) {</p><p>// println é um método estático da classe out</p><p>System.out.println(“Teste”);</p><p>}</p><p>}</p><p>Exemplos de classes estáticas no Java (cont...)</p><p>• Math</p><p>public class Principal {</p><p>public static void main(String[] args) {</p><p>// A classe Math possui diversos métodos estáticos</p><p>// Math.PI é uma constante estática</p><p>double area = Math.PI * Math.pow(20, 2);</p><p>}</p><p>}</p><p>Exemplos de classes estáticas no Java (cont...)</p><p>• Calendar</p><p>public class Principal {</p><p>public static void main(String[] args) {</p><p>// O método getInstace é estático e retorna um objeto</p><p>Calendar c = Calendar.getInstance();</p><p>// O método get é um método do objeto e não da classe</p><p>// Já o HOUR_OF_DAY é uma constante estática da</p><p>classe</p><p>// Calendar.</p><p>int hora = c.get(Calendar.HOUR_OF_DAY);</p><p>System.out.println(“Hora atual = ” + hora);</p><p>}</p><p>}</p><p>Construtores</p><p>1º Semestre/2024</p><p>M.Sc. Prof. Stefano B. B. R. P. Mathias</p><p>Linguagem de Programação Orientada a Objeto</p><p>AULA 06</p><p>Objetivos:</p><p>O objetivo desta aula é apresentar os</p><p>conceitos de construtores em classes.</p><p>• Introdução</p><p>• Construtores</p><p>• Destrutores</p><p>• Sobrecarga de construtores</p><p>Tópicos</p><p>Introdução</p><p>• Tudo que foi visto na disciplina até aqui em relação a Programação</p><p>Orientada a Objeto, envolve criar objetos na maioria dos casos.</p><p>• Sempre que desejamos criar um objeto, precisamos colocar o nome</p><p>da classe, o nome da variável, o sinal de igual, a palavra new e o</p><p>nome da classe novamente e por fim, abrir e fechar parênteses.</p><p>• Exemplo: Cliente cliente = new Cliente();</p><p>• Nesta aula, iremos entender o porque de se utilizar o new e o nome</p><p>da classe() na construção dos objetos.</p><p>Construtores</p><p>• O construtor de uma classe é chamado toda vez que um objeto de</p><p>classe é instanciado.</p><p>• O construtor possui o mesmo nome da classe.</p><p>• Para chamar (também é comum utilizar a palavra invocar) algum</p><p>construtor de uma classe, a palavra new deve ser utilizada.</p><p>• Considerando o exemplo do slide anterior, ao colocarmos new nome</p><p>da classe(), estamos na verdade chamando o construtor da classe em</p><p>questão.</p><p>Construtores (cont...)</p><p>• Cliente cliente = new Cliente();</p><p>Método construtor</p><p>Chamar o método construtor</p><p>Nome da variável</p><p>Tipo de dado</p><p>Construtores (cont…)</p><p>public class Livro {</p><p>public Livro() {</p><p>...</p><p>}</p><p>}</p><p>Livro l = new Livro();</p><p>Construtor</p><p>Invoca / executa</p><p>o construtor</p><p>Construtor padrão</p><p>• Quando o construtor não é fornecido, o Java fornece um construtor</p><p>padrão (sem parâmetros). Toda classe possui pelo menos um</p><p>construtor.</p><p>Equivale:</p><p>public class Livro {</p><p>}</p><p>public class Livro {</p><p>public Livro() {</p><p>}</p><p>}</p><p>Destrutores</p><p>• Conceitualmente o destrutor é executado no momento em que a</p><p>classe é destruída.</p><p>• A linguagem Java não possui o conceito de destrutores.</p><p>• Quem destrói os objetos criados é o Garbage Collector.</p><p>• O Garbage Collector remove da memória todos os objetos que não serão</p><p>mais utilizados pelo programa.</p><p>• Não é possível controlar o Garbage Collector e não é possível saber quando</p><p>os objetos serão removidos da memória.</p><p>Sobrecarga de construtores</p><p>• Assim como os métodos, os construtores podem ter sobrecarga, ou</p><p>seja, a classe pode conter mais de construtor definido.</p><p>• Para utilizar a sobrecarga, a assinatura dos construtores (parâmetros)</p><p>deverão ser diferentes.</p><p>• O operador this é utilizado para invocar outro construtor da classe.</p><p>Sobrecarga de construtores (cont…)</p><p>public class Livro {</p><p>private String titulo;</p><p>public Livro() {</p><p>}</p><p>public Livro(String titulo) {</p><p>this.titulo = titulo;</p><p>}</p><p>}</p><p>// Invoca o construtor 1</p><p>Livro livro1 = new Livro();</p><p>// Invoca o construtor 2</p><p>Livro livro2 = new Livro(“Titulo livro”);</p><p>Construtor 1</p><p>Construtor 2</p><p>Sobrecarga de construtores (cont…)</p><p>public class Data {</p><p>private int dia, mes, ano, hora, minuto, segundo;</p><p>public Data(int dia, int mes, int ano, int hora,</p><p>int minute, int segundo) {</p><p>this.dia = dia;</p><p>this.mes = mes;</p><p>...</p><p>}</p><p>public Data(int dia, int mes, int ano) {</p><p>this(dia, mes, ano, 0, 0, 0);</p><p>}</p><p>public Data() {</p><p>this(0, 0, 0, 0, 0, 0);</p><p>}</p><p>}</p>

Mais conteúdos dessa disciplina