0% acharam este documento útil (0 voto)
20 visualizações44 páginas

Programao Soluçes Computacionais

Enviado por

Tiago Machado
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
20 visualizações44 páginas

Programao Soluçes Computacionais

Enviado por

Tiago Machado
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 44

E2A DIGITAL

PROGRAMAÇÃO DE SOLUÇÕES COMPUTACIONAIS


CONECTA
16.09.2023
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
E2A DIGITAL

PROGRAMAÇÃO DE SOLUÇÕES
C O M P U TA C I O N A I S

TA L K
30set | sábado | 9 - 11h50
E2A DIGITAL
Orientações sobre o momento dos encontros síncronos

Momento Pedagógico Dúvidas gerais, para além do O encontro é gravado e a gravação


Material Didático - Unidades 04, 05 E 06 Objetivo de trabalhar o conteúdo conteúdo, devem ser tratadas nos será disponibilizada posteriormente
pedagógico da UCD canais oficiais: pelo Tutor, no Ulife
Tutor: Fórum com o tutor, disponível
na UCD, no Ulife;
CAE: (11) 3298-7730 (WhatsApp) ou
https://aluno.ead.br
Agenda

• Como analisar e resolver problemas computacionais


• Um caso
• POO
• Práticas
COMO ANALISAR
UM PROBLEMA

COMPUTAÇÃO ANÁLISE
Algoritmos que testem as Esse algoritmo é eficiente?
premissas no horário
gerado
PROCESSO
DIVIDIR Dividir o problema em
pedaços menores para
avaliar melhor
TEXTUAL Descrever textualmente os
passos

ESTRUTURAS Como esses dados são


armazenados e processados

ITERAÇÕES Laços e comparações


necessárias para resolver o
problema
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, O sistema deve gerar relatórios com as seguintes informações:
nome, descrição, preço unitário e quantidade em estoque. Lista de todas as autopeças com seus detalhes.
As autopeças devem ser armazenadas em uma coleção (por exemplo, um Lista das autopeças com estoque baixo (por exemplo, menos de 10 unidades).
ArrayList). Valor total do estoque (soma do preço unitário * quantidade em estoque de todas as
Consulta de Autopeças: autopeças).
Persistência de Dados:
Deve ser possível listar todas as autopeças cadastradas.
Deve ser possível buscar uma autopeça por código. As informações das autopeças devem ser salvas em um arquivo de texto chamado "estoque.txt".
Atualização de Estoque: Toda vez que o programa for aberto, ele deve carregar as informações do arquivo para
preencher o estoque.
Deve ser possível adicionar ou remover unidades de uma autopeça do estoque. Requisitos Técnicos:
O sistema deve atualizar automaticamente a quantidade em estoque após cada
operação. Use classes e objetos para representar as autopeças.
Venda de 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.
Deve ser possível registrar uma venda de autopeças. Utilize estruturas de controle, como loops e condicionais, para criar uma experiência de usuário
O sistema deve reduzir a quantidade em estoque das autopeças vendidas. fluida.
Relatórios: 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
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).

Paradigma Orientado 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).

Programação Imperativa • Programação Orientada a Objetos

Dados
Dados

Dados
Proc
Proc
Proc1 Proc2 Proc3

Dados

Dados
Proc

Programação Imperativa x POO


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

Importância e Motivação
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.

Conceitos Básicos
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.

Ou Seja...
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.

Membros de uma Classe


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 -
Em um contexto de automação bancária podemos identificar algumas classes:
•Cliente
•Agência
•Conta
•Conta Corrente
•Conta Poupança

Exemplo de Classes
A classe Conta Corrente pode conter os seguintes membros:
•Atributos
número
agência
saldo
•Métodos
depositar
sacar
consultar saldo

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);
}
}

Uma Implementação para 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

Utilizando a Classe “Conta Corrente”


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.

Mensagens
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.

Programar em OO
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);
E agora?
}
public void setLargura(float larg){ Observe a classe com os
largura = larg;
} métodos get e set, construtor,
public float calculaArea(){
return altura * largura; atributos, etc...
}
public float calculaPerimetro(){
return 2 * altura + 2 * largura;
}
}
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?
É 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.

Método Construtor
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;
}
...
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).

Programar de Forma OO
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.

Alguns Detalhes...
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.

Exercícios
Como identificar classes ? Meio de transporte aéreo. Classe:
“Veiculo de Transporte Aéreo”

Meio de transporte marítimo.


Classe:
“Veiculo de Transporte Marítimo”

Meio de transporte terrestre. Classe:


“Veiculo de Transporte Terrestre”

• 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 Avião Barco

Pessoa Física Pessoa Jurídica Hidroavião

 Herança Simples  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 pressuposto que 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...
1)Pesquisa sobre os temas a seguir, descreva cada um de forma sucinta e dê um exemplo:

 Classe Abstrata

 Interface

 Função Virtual

 Polimorfismo

Exercícios
Obrigado!

Você também pode gostar

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy