Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Prévia do material em texto

CONECTA
16.09.2023
E2A DIGITAL
PROGRAMAÇÃO DE SOLUÇÕES COMPUTACIONAIS
E2A DIGITAL
Professor Alexandre 
“Montanha”
• Mestre em Educação e Gestão Social
• Especialista em Educação
• Especialista em Gamification
• Analista de Sistemas
• Historiador
• Gamer
http://lattes.cnpq.br/7137425845019062
https://www.linkedin.com/in/alexandre-oliveira-montanha/
alexmontanha@hotmail.com
http://lattes.cnpq.br/7137425845019062
https://www.linkedin.com/in/alexandre-oliveira-montanha/
mailto:alexmontanha@hotmail.com
E2A DIGITAL
TA L K
3 0 s e t | s á b a d o | 9 - 1 1 h 5 0
P R O G R A M A Ç Ã O D E S O L U Ç Õ E S 
C O M P U TA C I O N A I S
E2A DIGITAL
Orientações sobre o momento dos encontros síncronos
Material Didático - Unidades 04, 05 E 06
Momento Pedagógico
Objetivo de trabalhar o conteúdo 
pedagógico da UCD
Dúvidas gerais, para além do 
conteúdo, devem ser tratadas nos 
canais oficiais:
Tutor: Fórum com o tutor, disponível 
na UCD, no Ulife;
CAE: (11) 3298-7730 (WhatsApp) ou 
https://aluno.ead.br
O encontro é gravado e a gravação 
será disponibilizada posteriormente 
pelo Tutor, no Ulife
https://aluno.ead.br/
Agenda
• Como analisar e resolver problemas computacionais
• Um caso
• POO
• Práticas
COMO ANALISAR
UM PROBLEMA
Algoritmos que testem as 
premissas no horário 
gerado
COMPUTAÇÃO
Esse algoritmo é eficiente?
ANÁLISE
PROCESSO
DIVIDIR Dividir o problema em 
pedaços menores para 
avaliar melhor
ITERAÇÕES Laços e comparações 
necessárias para resolver o 
problema
ESTRUTURAS Como esses dados são 
armazenados e processados
TEXTUAL Descrever textualmente os 
passos
Tema: Sistema de Gerenciamento de Estoque de Autopeças
Descrição do Projeto:
Desenvolva um sistema em Java para gerenciar o estoque de uma loja de
autopeças. O sistema deve ser desenvolvido dentro do paradigma orientado a
objetos e pode ser organizado em um repositório GIT.
Requisitos Funcionais:
Cadastro de Autopeças:
Deve ser possível cadastrar autopeças com os seguintes atributos: código,
nome, descrição, preço unitário e quantidade em estoque.
As autopeças devem ser armazenadas em uma coleção (por exemplo, um
ArrayList).
Consulta de Autopeças:
Deve ser possível listar todas as autopeças cadastradas.
Deve ser possível buscar uma autopeça por código.
Atualização de Estoque:
Deve ser possível adicionar ou remover unidades de uma autopeça do estoque.
O sistema deve atualizar automaticamente a quantidade em estoque após cada
operação.
Venda de Autopeças:
Deve ser possível registrar uma venda de autopeças.
O sistema deve reduzir a quantidade em estoque das autopeças vendidas.
Relatórios:
O sistema deve gerar relatórios com as seguintes informações:
Lista de todas as autopeças com seus detalhes.
Lista das autopeças com estoque baixo (por exemplo, menos de 10 unidades).
Valor total do estoque (soma do preço unitário * quantidade em estoque de todas as
autopeças).
Persistência de Dados:
As informações das autopeças devem ser salvas em um arquivo de texto chamado "estoque.txt".
Toda vez que o programa for aberto, ele deve carregar as informações do arquivo para
preencher o estoque.
Requisitos Técnicos:
Use classes e objetos para representar as autopeças.
Utilize exceções para lidar com erros, como estoque negativo ou arquivo ausente.
Implemente um menu de console para interagir com o usuário.
Utilize estruturas de controle, como loops e condicionais, para criar uma experiência de usuário
fluida.
Organize seu código em classes e métodos para manter a modularidade e a legibilidade.
Utilize o Java 8 ou superior para aproveitar as funcionalidades mais recentes da linguagem.
Entrega:
Você pode criar um repositório no GitHub ou em outra plataforma de controle de versão para armazenar seu código-fonte. Certifique-se de incluir um diagrama de classes, um arquivo 
README.md com instruções de execução e exemplos de uso, e o arquivo "estoque.txt" contendo dados de exemplo.
Lembre-se de testar bem o seu sistema e lidar com possíveis exceções para garantir que ele seja robusto e confiável.
Este projeto permitirá aos alunos praticar conceitos de orientação a objetos, manipulação de arquivos, interface de console e lógica de programação em Java.
Paradigmas de Linguagens de Programação
Paradigma Orientado a Objetos
Paradigma Orientado a Objetos
A orientação a objetos é uma abordagem de desenvolvimento de software que 
organiza os problemas e suas soluções como um conjunto de objetos distintos.
Os programas em POO (programação orientada a objetos) tendem a ser mais lentos 
(por serem mais pesados), porém a melhor estruturação do código é um benefício que 
compensa (salvo casos a parte).
Paradigma Orientado a Objetos
O paradigma orientado a objetos tem o intuito de proporcionar a modelagem dos 
objetos do mundo real de uma maneira mais fidedigna. Ou seja, aproximar o mundo 
real do virtual, através da implementação de “blocos de códigos” com suas próprias 
regras e valores e as interações entre tais blocos (troca de mensagens).
Programação Imperativa x POO
Programação Imperativa • Programação Orientada a Objetos
Observe que na programação imperativa os processos compartilham os mesmos dados, ou
seja, todos os procedimentos podem ter acesso a qualquer dado de forma indiscriminada
(é óbvio, estamos generalizando).
Dados
Proc1
Dados
Proc2 Proc3
Proc
Dados
Proc
Dados
Proc
Dados
Importância e Motivação
Importância: um objeto encapsula tanto os dados quanto o processamento que é aplicado aos dados, o que leva ao 
reuso de código. Aumento da produtividade, diminuição do custo de desenvolvimento e manutenção.
Motivação: reusabilidade, economia de tempo, robustez, eficiência, portabilidade
Conceitos Básicos
Objeto 
•Qualquer coisa existente no mundo real, em formato concreto ou abstrato (que exista física ou conceitualmente)
•Ex: aluno, mesa, professor, cadeira, caneta, conta bancária, tela, botão em uma tela etc.
•Estrutura computacional que representa um objeto do mundo real
Classe
•Quando identificamos características e operações similares em objetos distintos, estamos realizando sua classificação, ou seja, identificando classes!
•É uma descrição de um conjunto de objetos que compartilham os mesmos atributos, operações, relacionamentos e semântica.
Ou Seja...
Uma classe descreve uma categoria genérica, já um objeto, ou instância de uma classe, refere-se à 
estrutura de dados que representa um membro específico da categoria.
Fazendo uma analogia, a classe está para a planta 
baixa assim como o objeto está para a casa.
Membros de uma Classe
Atributos
•São dados ou campos privados.
•Representam as características que os objetos da classe possuem.
•Cada instância tem seus próprios valores de atributos, mas compartilha o nome e os comportamentos dos atributos com as outras
instâncias da classe.
•Os valores dos atributos nos ajudam a distinguir os objetos entre si.
Métodos
•Funções/procedimentos ou operações, comumente públicos.
•Representam o comportamento que os objetos da classe possuem.
•Modificam o estado de um objeto ou prestam serviços a outros objetos.
Correspondência de Termos
POO Programação Imperativa
Objeto Variável dinâmica (ponteiro)
Classe Tipo
Mensagem Chamada de subprograma
Método Subprograma (função ou procedimento)
Herança -
Polimorfismo -
Exemplo de Classes
Em um contexto de automação bancária podemos identificar algumas classes:
•Cliente
•Agência
•Conta
•Conta Corrente
•Conta Poupança
A Classe “Conta Corrente”
A classe Conta Corrente pode conter os seguintes membros:
•Atributos
número
agência
saldo
•Métodos
depositar
sacar
consultar saldo
Uma Implementação para a Classe 
“Conta Corrente”
public class ContaCorrente {
private int numero, agencia;
private double saldo;
public void inicializarContaCorrente(int n, int ag) {
numero = n;
agencia = ag;
saldo = 0;
}
public void sacar(double valor){
saldo = saldo - valor;
}
public void depositar(double valor){
saldo = saldo+ valor;
}
public double consultarSaldo(){
return (saldo);
}
}
Utilizando a Classe “Conta Corrente”
public class Banco {
public static void main(String args[]){
ContaCorrente minhaConta;
minhaConta = new ContaCorrente();
minhaConta.inicializarContaCorrente(123, 7);
minhaConta.depositar(50);
minhaConta.depositar(70);
System.out.println("Saldo:" + minhaConta.consultarSaldo());
}
}
Em Java, um objeto é criado utilizando-se a palavra reservada new:
ContaCorrente minhaConta;
minhaConta = new ContaCorrente();
A linha 1 cria uma área de memória que é uma referência para um objeto da classe ContaCorrente
A linha 2 cria um objeto da classe ContaCorrente e o atribui a minhaConta
Mensagens
Programas orientados a objetos são constituídos por objetos que trocam mensagens entre si
O envio de uma mensagem a um objeto corresponde a invocar um método de tal objeto:
minhaConta.inicializarContaCorrente(100, 1212);
minhaConta.depositar(1000);
Os métodos inicializarContaCorrente e depositar são invocados.
Em outras palavras, são enviadas mensagens ao objeto minhaConta para que este realize as operações 
inicializarContaCorrente e depositar.
Programar em OO
O simples fato de programar em Java não significa que a aplicação seja orientada a objetos.
É muito importante entender a filosofia deste paradigma de programação para poder obter os seus benefícios.
import java.util.Scanner;
public class Retangulo {
public static void main(String Args[]) {
float altura, largura, area, perimetro;
Scanner input = new Scanner(System.in);
System.out.print("Informe a altura do retângulo: ");
altura = input.nextFloat();
System.out.print("Informe a largura do retângulo: ");
largura = input.nextFloat();
area = altura * largura;
perimetro = 2 * altura + 2 * largura;
System.out.println("A area é: " + area);
System.out.println("O perimetro é: " + perimetro);
}
}
O programa funciona, mas isso é um programa OO? Resposta: NÃO!!!!!!
public class Retangulo {
private float altura, largura;
public Retangulo(){
altura = 1; largura = 1;
}
public float getAltura(){
return (altura);
}
public void setAltura(float alt){
altura = alt;
}
public float getLargura(){
return (largura);
}
public void setLargura(float larg){
largura = larg;
}
public float calculaArea(){
return altura * largura;
}
public float calculaPerimetro(){
return 2 * altura + 2 * largura;
}
}
E agora?
Observe a classe com os 
métodos get e set, construtor, 
atributos, etc...
import java.util.Scanner;
public class Principal {
public static void main(String Args[ ]) {
Retangulo ret = new Retangulo();
Scanner input = new Scanner(System.in);
System.out.print("Informe a altura do retângulo: ");
ret.setAltura(input.nextFloat());
System.out.print("Informe a largura do retângulo: ");
ret.setLargura(input.nextFloat());
System.out.println("A area é: " + ret.calculaArea());
System.out.println("O perimetro é: " + ret.calculaPerimetro());
}
}
E agora? 
Método Construtor
É usado para inicializar os valores dos atributos (valores default).
Deve ter o mesmo nome da classe que o contém e não possui retorno.
Pode ter parâmetros.
Toda subclasse deve chamar um dos construtores da superclasse direta ou indiretamente para inicializar os valores da classe 
para o objeto da subclasse.
A subclasse pode chamar implicitamente o construtor da superclasse.
A subclasse pode chamar explicitamente o construtor da superclasse através do operador Super.
Observe que no trecho de código abaixo o método construtor é público (sempre deve ser), ele não possui retorno 
(obrigatoriamente) e não possui parâmetro (isso é opcional):
public class Retangulo {
private float altura, largura;
public Retangulo(){
altura = 1; largura = 1;
}
...
Programar de Forma OO
Programação em OO não foi pensada para se escrever menos.
Embora o programa se pareça maior e mais complexo, ele representa um retângulo de uma forma mais limpa e 
próxima do mundo real.
À medida que esse código se tornar mais complexo, quem for usar essa classe não vai precisar conhecer detalhes e 
será muito melhor de manter (modificar).
Alguns Detalhes...
Um método é uma função definida na classe que é invocada pelo objeto;
O operador de membro “.” (ponto) acessa um método ou atributo do objeto; 
Construtores são invocados sempre que o objeto é alocado com new; 
O operador this se refere ao objeto atual. Por exemplo, se uma variável de parâmetro tiver o mesmo nome do atributo você 
pode identifica-los da seguinte maneira:
public void setNome(String nome) {
this.nome = nome;
}
Alguns Detalhes...
Os modificadores de acesso permitem controlar a visibilidade de 
atributos e métodos (além da própria classe):
•public: todos os métodos e atributos são visíveis dentro da classe em que 
são definidos. Porém, ao torna-los públicos é possível fazê-los visíveis para 
todas as classes externas a classe a que pertencem.
•private: é o tipo de acesso mais restritivo. Membros de classe que são 
declarados com o acesso privado somente podem ser utilizados pela 
classe em que foram definidos.
•protected: o membro de classe protegido é acessível a classes no mesmo 
pacote, acessível e herdado por subclasses no mesmo pacote, e pode ser 
herdado por subclasses declaradas em outros pacotes.
Exercícios
1)Na classe Retangulo, implemente o método exibe(), que deve retornar as informações do retângulo:
Altura: altura
Largura: largura
Área: área 
Perímetro: perímetro.
Exercícios
2)Implemente o método exibe() na classe ContaCorrente que imprima na tela os dados da conta:
Agência: agencia
Conta: conta
Saldo: R$ saldo.
•Para testar a implementação dessa classe, solicite inicialmente ao usuário que informe o número e agência da conta.
•Em seguida, solicite um valor para depósito e logo após, um valor para saque. 
•Por último, imprima os dados da conta utilizando o método exibe() implementado.
•Altere o método sacar(), de modo que não seja possível sacar um valor maior que o saldo da conta. Emita uma mensagem caso o valor do saque seja inválido.
Exercícios
3)Crie uma classe Funcionario que possua os seguintes atributos: nome, idade, cargo, salário e endereço. Crie os 
métodos gets e sets para os atributos, bem como uma classe principal que teste a classe. Crie um método exibe() para 
imprimir na tela todas as informações de um funcionário.
Como identificar classes ?
Meio de transporte terrestre. Classe:
“Veiculo de Transporte Terrestre”
Meio de transporte aéreo. Classe:
“Veiculo de Transporte Aéreo”
Meio de transporte marítimo. 
Classe:
“Veiculo de Transporte Marítimo”
• Repare que ao identificarmos os elementos e classificá-los quanto às
suas características estamos criando classes. No exemplo acima
temos três classes: Veiculo Aéreo, Veiculo Terrestre, Veiculo
Marítimo (ou Fluvial).
Herança: Reutilização de 
Código
Segundo Yourdon, é um mecanismo que permite um objeto incorporar toda 
ou parte da definição de outro objeto como parte da sua própria definição.
É a propriedade que permite que as classes tenham uma hierarquia entre 
elas, criando assim uma espécie de “linhagem”, permitindo que uma classe 
qualquer herde de seus ancestrais todas as características (atributos e 
métodos).
Quando a herança é oriunda de apenas uma única classe (de forma direta) 
dizemos que a herança é simples. Porém quando a herança é oriunda de mais 
de uma classe (também de forma direta) dizemos que a herança é múltipla.
Em Java não temos herança múltipla, porém a implementação de interfaces é 
uma maneira de “burlar” tal regra.
Pessoa
Pessoa Física Pessoa Jurídica
 Herança Simples
Hidroavião
Avião Barco
 Herança Múltipla
• As classes abstratas se diferem das interfaces basicamente em dois quesitos: as interfaces não permitem a
declaração de atributos e também não permitem que os métodos nela contidos sejam implementados.
Como identificar a hierarquia?
Veiculo
Terrestre Marítimo Aéreo
Motocicleta Automóvel
• Partimos do pressupostoque de um modo geral todos eles são veículos. Ou seja,
possuem características em comum, possibilitando assim a criação de uma classe
base, ou superclasse, chamada “Veiculo” (generalização). Os demais veículos são
derivados deste e assim temos veículos terrestres, marítimos e aéreos.
• Podemos continuar com a nossa abstração se quisermos e assim tratarmos um
veículo terrestre com sendo um automóvel ou uma motocicleta (especialização).
Exemplo 2
Implementação de Herança: SuperClasse “Veiculo”
Observe que os atributos em comum de um
veículo foram agrupados nesta classe. Fica
aqui uma dica: a criação desta classe como
abstrata seria algo a se pensar!
A referência this é utilizada para obter o
objeto através do qual a chamada do
método é feita, ou seja, serve para evitar
ambiguidades. Imagine um parâmetro com
o mesmo nome de um atributo?!
Exemplo 2
Implementação de Herança (continuação): Classe (derivada) “VeiculoAereo”
Em java a palavra reservada “extends” serve para indicar
a herança. Veja que a classe VeiculoAereo “herda” de
Veiculo. Observe a chamada ao método construtor da
superclasse através do comando “super”. Com isso
estamos inicializando os atributos originados da
superclasse. Não utiliza-lo não ocasiona erro de
compilação, porém a qualidade do software pode ficar
comprometida.
Exemplo 2
Implementação de Herança (continuação): Utilizando as classes.
Repare na chamada ao método “setTipoCombustivel”. Tal
método foi implementado na superclasse “Veiculo”, porém
com a herança...
Exercícios
1)Pesquisa sobre os temas a seguir, descreva cada um de forma sucinta e dê um exemplo:
 Classe Abstrata
 Interface
 Função Virtual
 Polimorfismo
Obrigado!

Mais conteúdos dessa disciplina