Técnicas de Programação

Professor Dr. Rodolfo Stoffel Antunes.

Apresentação da disciplina:

aula_00_apresentacao

Exercício 1, Implementação: Python Básico
Implemente dois scripts utilizando a linguagem Python. Utilize a ferramenta web repl.it para realizar o desenvolvimento.

O primeiro script deve gerar um arquivo de texto com 100 valores inteiros aleatórios, no intervalo entre 1 e 100.
O segundo script deve abrir o arquivo de texto gerado, ler todos os valores, calcular a média e a mediana dos valores lidos, e imprimi-las na tela.
Submeta como solução (i) os dois scripts gerados, e (ii) uma captura de tela do repl.it mostrando o código fonte e a saída do segundo script.

Exercício 2:

Exercício de Implementação: Conceitos de Orientação a Objetos
Utilize os conceitos de orientação a objetos para desenvolver um conjunto de classes que permita representar diferentes tipos de formas geométricas através de objetos em um programa de computador. A estrutura de classes deve ser capaz de representar formas de duas e três dimensões. Mais especificamente, deverão ser desenvolvidas classes que sejam capazes de representar as seguintes formas geométricas:

Círculo
Quadrado
Retângulo
Esfera
Cubo
Paralelepípedo
Utilize os conceitos de herança e classes abstratas conforme a necessidade. Todas as classes deverão receber as dimensões das formas geométricas como parâmetros de seus métodos construtores. Além disso, todas as classes deverão ter implementado um método para o cálculo da área (no caso de formas de duas dimensões) ou de seu volume (no caso de formas de três dimensões).

Envie através do Moodle o arquivo de código Python contendo a implementação realizada.


Exercício 3:

Exercício de Implementação: Estruturas de Listas
Utilize os conceitos de orientação a objetos para implementar uma lista de alocação dinâmica duplamente encadeada utilizando a linguagem Python. O objetivo desta lista será armazenar as informações básicas de uma conta corrente em um banco (número da conta, nome do correntista, e saldo disponível).

Como sugestão, lembre-se que deve haver pelo menos duas classes: uma responsável por controlar a estrutura e implementar os métodos para o gerenciamento dos dados (inserção, remoção, busca), e outra que implementa os elementos individuais que estarão contidos na estrutura, contendo os dados do elemento e os ponteiros para os elementos contíguos.

Procure implementar as seguintes operações para gerenciamento da lista:

Inserção de um novo elemento no começo da lista;
Inserção de um elemento em uma posição arbitrária da lista;
Remoção de um elemento de uma posição arbitrária da lista;
Busca por um elemento da lista segundo os atributos de nome e número da conta;
Método para retornar o balanço do banco (percorrendo toda a lista e somando os valores das contas).
O arquivo .py com o código Python desenvolvido deverá ser enviado através do Moodle da disciplina, nesta atividade.


Trabalho 4:

Exercício: Dicionários e Processamento de Dados em Python
Utilize os conceitos de orientação a objetos e as estruturas fundamentais de Python (listas e dicionários) para implementar um programa que realiza a leitura de um conjunto de dados sobre as temperaturas medidas em diferentes cidades do Brasil ao longo de 2019. O conjunto de dados encontra-se disponível no Moodle da disciplina.

O conjunto de dados deverá ser organizado de acordo com as cidades onde foram realizadas as leituras e os meses quando elas foram realizadas. Em seguida, o aplicativo deverá imprimir na tela as temperaturas média, mediana, mínima, e máxima, para cada mês de 2019, para cada uma das cidades fornecidas no banco de dados.

Deverá ser entregue o arquivo .py com o código fonte produzido e uma captura de tela demonstrando a saída do programa gerado.


Trabalho final:

trabalho_tecnicas_programacao

Resolução do trabalho: Montagem de protótipo de dApp para acesso a blockchain de testes, envio de valores e recuperação dos mesmos.

Resumo:
Foi desenvolvido um protótipo de software para simular a recepção de dados, envio de dados para blockchain e exibição dos mesmos. A blockchain escolhida foi o Ethereum rodando em um nó privado. O nó privado foi configurado usando TestRPC1. O código gerado para a blockchain Ethereum foi escrito em Solidity.

Arquitetura do protótipo

O protótipo foi construído para permitir testar conceitos. O principal era a troca de dados entre aplicação cliente e a blockchain. A aplicação cliente é também chamada de dApp (ou aplicação descentralizada), esta aplicação pode rodar em qualquer dispositivo geralmente em um navegador. Por outro lado (server side) temos a aplicação “servidor”, no caso a blockchain que atende as requisições dos clientes (dApps). A ligação entre cliente e servidor se dá por chamadas RPC (Remote Procedure Call). A arquitetura do protótipo foi configurada em uma máquina local para testes, porém como o servidor escuta portas RPC um ambiente de rede com máquinas virtuais ou reais também poderia ter sido utilizado para testes. O lado cliente é composto por uma simples interface com o usuário feita em HTML e Jquery. O cliente deve ter no seu código javascript um Provider, que é o responsável por criar a ligação com o servidor e um código ABI (Application Binary Interface). A ABI é responsável pela padronização, para interações com o contrato, esta é descrita em JSON (JavaScript Object Notation). O nó necessita da biblioteca web3.js, o qual permite que o nó Ethereum possa interagir via Http (Hypertext Transfer Protocol) ou RPC com os clientes. A biblioteca web3.js deve ser instalada via node.js2 e deve estar presente no lado cliente. O nó Ethereum necessita ter a uma porta TPC (Transmission Control Protocol) disponível (geralmente é a 8545) e um local em disco para guardar os blocos que compõe a blockchain. A blockchain utiliza no armazenamento “trie” (digital tree ou prefix tree) como estruturas de dados, é uma estrutura de árvore. A rede Ethereum é uma rede pública na qual são necessários Eth (dinheiro) para processar transações, por isto não foi utilizada. Apesar de existirem redes Ethereum públicas para testes como Ropsten, Kovan, Rinkeby e Goerli, neste cenário foi optado pela configuração de um nó privado local. A figura 1, apresenta a arquitetura.

Estrutura do protótipo:

Arquitetura do teste:

Blocos no disco:

Contrato em Solidity:

Testrpc rodando:

Exemplo código js com web3js:

Formulário simples:

O trabalho final foi postado no git hub.