3 de dez. de 2017

Python para Engenheiros de Redes - Parte III


Olá Pessoal Boa Tarde, nesse post vamos tentar dar um overview sobre os principais paradigmas da programação.

O que é um paradigma? Um paradigma segundo a definição do wikipedia, é um “modelo digno de ser seguido”, no âmbito da programação temos dois paradigmas, modelos, principais:


Paradigma da Programação Estruturada.


Qualquer programa pode ser implementada, utilizando três estruturas básicas:


Sequência:

Indica uma sequência de tarefas (segmentos do código), à serem executados para a realização do programa.






























Condicional:

Durante a execução do programa podemos escolher qual fluxo seguir baseado em condições lógicas.









































Laço de Repetição:

Permite a execução repetitiva de alguma tarefa









A programação estruturada tem por objetivo realizar uma estrutura lógica clara, assim como fazer um código simples.

A unidade básica de modularização da programação estruturada é a chamada “função”.

Uma função é um segmento de código, independente do código principal que pode ser executado inúmeras vezes durante à execução do programa.

Dessa forma, a programação estruturada divide o programa em funções, de forma a ter um programa mais organizado. E com a ajuda de laços de repetição, condicionais e sequência executa uma determinada tarefa.

Exemplos de linguagens estruturadas, Pascal, C, Fortran etc



Paradigma da Programação Orientada a Objetos.


Na Programação Orientada a Objetos POO, a idéia é aproximar o mundo real ao mundo virtual.

O mundo real está cheio de objetos por exemplo carros, pessoas, profissões,calculadoras etc... tudo pode ser um objeto. Na POO, esses objetos do mundo real tentam de alguma forma ser modelados em entidades chamadas tambem de “objetos” no mundo virtual.

Na POO, o programa é visto como um conjunto de objetos capazes de interagir entre si, com o objetivo de cumprir uma certa tarefa.

O Objetivo da POO é criar um código que seja reutilizável, intuitivo e de fácil manutenção.

As estruturas básicas do POO são:

Classe:

Estrutura de dados que contém variáveis, e funções , que são chamadas de métodos. Seria como um template.

Objeto:

Um objeto é uma instância da classe.



Exemplo de POO, imaginemos que nos foi solicitado um programa que calcule o equivalente em anos humanos à idade de um cachorro. Considerar a equivalência 1ano cachorro = 7 anos humanos. No momento de escrever esse post meu cachorro de 11 anos estava aqui nos meus pés e me veio na cabeça essa equivalência.

A primeira coisa que precisamos definir é a classe cachorro, um cachorro pode ter certos atributos como nome, raça, cor, idade altura peso etc.

Em linguagem python a classe ficaria da seguinte forma, tomando em consideração os atributos (variavéis), nome, raça, cor e idade.


class cachorro(object):
 #Construtor do objeto
 def __init__(self,nome, raca,cor,idade):
  self.nome = nome
  self.raca = raca
  self.idade = idade



Agora precisamos definir a função que vai nos retornar ê equivalencia em anos humanos. Essa função é chamada de método em POO, e a mesma irá ser definida dentro da classe cachorro.


 def idadeeqhumanos(self):
  #Faz o calculo da idade equivalente
  idadeeq=self.idade*7
  #Retorna a idade equivalente
  return idadeeq



Além disso vamos criar uma outra função que nos de um print na tela à idade do cachorro:

 def getidade(self):
  return self.idade


Colocando tudo junto vamos ter:

#!/usr/bin/python

class cachorro(object):
 #Construtor do objeto
 def __init__(self,nome, raca,cor,idade):
  self.nome = nome
  self.raca = raca
  self.idade = idade

 def idadeeqhumanos(self):
  #Faz o calculo da idade equivalente
  idadeeq=self.idade*7
  #Retorna a idade equivalente
  return idadeeq

 def getidade(self):
  #Print em tela da idade atual do cachorro
  return self.idade


#Meu primeiro objeto cachorro de nome whisky
whisky=cachorro("whisky","viralata","marrom",11)

#Meu segundo objeto cachorro de nome bruno
bruno=cachorro("bruno","viralata","branco",2)

#Print do calculo da idade equivalente
print ("Idade do cachorro %s em idade Humana %s" % (whisky.getidade(),whisky.idadeeqhumanos()))

print ("Idade do cachorro %s em idade Humana %s" % (bruno.getidade(),bruno.idadeeqhumanos()))



Não se preocupem se não entendem o código linha por linha, o importante é ter a noção de como é a programação orientada à objetos.

Como podem ter percebido a POO é um pouco mais complexa que a programação estrutura, ela tem um nível de abstração mais elevado. Porém podem ficar tranquilos, como já tinha comentado em posts anteriores o objetivo de curso é criar programas que agilizem as nossas tarefas no dia a dia, e não virar, (pelo menos não agora :) ) desenvolvedores de software, e para isso a programação estrutura se encaixa perfeitamente.

Exemplos de linguagem orientada a objetos são java, C++, Python, sim python é uma liguagem orientada à objetos porém nada impede de utilizar a mesma utilizando o paradigma de programação estruturada.

Agora vou lhes mostrar um exemplo e vamos passar ele para código tanto da forma estruturada como orientada a objetos.

Nos foi solicitado um programa que receba como entrada dois números inteiros positivos e mostre como resultado a soma dos mesmos.



Utilizando Programação Estruturada:

#!/usr/bin/python

#Funcao soma, recebe como parametros duas variaveis
def soma(A,B):
 #Executa a soma, porem primeiro faz um cast das variaveis passando elas para  numero inteiro
 soma=int(A) + int(B)
 #retorna o resultado da soma
 return soma

#MAIN


i=0
#Solicitando as variaveis a serem somadas
A=raw_input("Insera um numero: ")
i+=1
B=raw_input("Insera um numero: ")
i+=1

#Executando a soma e fazendo o print do resultado
print ("A soma eh: %s" % soma(A,B))




Utilizando Programação Orientada Objetos:

#!/usr/bin/python

#Definindo Clase Variaveis
class Variaveis:
 numberVariaveis=0
 #Construtor, as variaveis vao ter sempre o valor inicial de cero
 def __init__(self, valor=0):
  self.valor=valor
  Variaveis.numberVariaveis+=1

 #Metodo que solicita a entrada de um numero inteiro
 def inPutValor(self):
  self.valor=raw_input("Insera um numero inteiro: ")

 #Metodo que imprime o valor atual do objeto
 def displayValor(self):
  print ("Valor Atual da Variavel %s: %s" % (Variaveis.numberVariaveis,self.valor))

#Definindo a Clase calculadora

class Calculadora:
 #Construtor, o objeto vai ter dois argumentos de entrada
 def __init__(self, valor1, valor2):
  self.valor1=valor1
  self.valor2=valor2

 #Metodo soma, vai somar os valores das variaveis
 def soma(self):
  self.soma=int(self.valor1) + int(self.valor2)
  print ("A soma eh: %s" % self.soma)

#MAIN



print "Criando Primeira Variavel"
#Crio o primeiro objeto da classe Variaveis
A= Variaveis()

#Verifico o valor inicial das variaveis
A.displayValor()

#Chamo o metodo inPutValor, para armazenar os valores das variaveis a serem somadas
A.inPutValor()

#Faco um print dos valores inseridos
A.displayValor()

print "-----------------------------"
print "Criando Segunda Variavel"
#O mesmo para uma segunda variavel
B = Variaveis()
B.displayValor()
B.inPutValor()
B.displayValor()


#Crio um objeto da classe calculadora, tendo como argumentos os atributos dos objetos variaveis
myCalculadora=Calculadora(A.valor,B.valor)

#Chamo o metodo soma
myCalculadora.soma()


#END



Como podem ver o programa estruturado é muito mais simples, porém a versão orientada à objetos é mais escalável, por exemplo e se eu quiser saber a quantidade de números que foram somados?. No programa estruturado toda vez que criar um novo número preciso acrescentar manualmente a variável “i” em uma unidade “i+=1”. No programa POO isso já esta definido no atributo numberVariaveis=0 o qual é incrementado toda vez que um objeto é criado.

Uma outra vantagem da POO é a reutilização de código, por exemplo se eu quiser além da soma, uma soma binária posso criar uma classe chamada “CalculadoraBinaria” a qual vai ser filha da classe “Calculadora” e vai herdar seus métodos.

O resumo desse post, seria que basicamente temos dois paradigmas principais de programação sendo o primeiro chamado de “Programação Estruturada” onde, com a ajuda de blocos de sequência, decisão e repetição conseguimos executar uma determinada tarefa, e em segundo lugar temos “Programação Orientada a Objetos”, onde com a ajuda de Classes e Objetos, interatuando entre si conseguimos executar uma tarefa.


Por hoje é isso ai, novamente fiquem tranquilos se não entenderem ao 100% os códigos exemplos mostrados nesse post, na medida que irem aprendendo mais sobre python as coisas começam a ficar mais claras. Semana que vem vamos programar o nosso primeiro programa em python o famoso "Olá Mundo". 

Aqui lhes deixo os link dos três programas utilizados hoje, se puderem rodar os mesmos nas VMs que já instalaram. Caso tenham alguma dificuldade em executar os mesmos favor me avisar.







Abcs e Muito Obrigado







Um comentário:

Gabriel Santana disse...

Interessante!!! Obrigado por compartilhar e continue escrevendo!

LinkWithin

Related Posts with Thumbnails