martes, 1 de septiembre de 2015

Maricela Ocaña
Programacion Paralela y Distribuida


Cinco programas fáciles de entender con POO y Python


Objeto y Clase

    Un objeto es una entidad que agrupa un estado y una funcionalidad relacionadas. El estado del objeto se define a través de variables llamadas atributos, mientras que la funcionalidad se modela a través de funciones a las que se les conoce con el nombre de métodos del objeto.
    Una clase, por otro lado, no es más que una plantilla genérica a partir de la cuál instanciar los objetos; plantilla que es la que define qué atributos y métodos tendrán los objetos de esa clase.

    En Python las clases se definen mediante la palabra clave class seguida del nombre de la clase, dos puntos (:) y a continuación, indentado, el cuerpo de la clase.




Herencia múltiple

    Una clase puede heredar de varias clases a la vez; basta con enumerar las clases de las que se hereda separándolas por comas. En el caso de que alguna de las clases padre tuviera métodos con el mismo nombre y número de parámetros las clases sobrescribirían la implementación de los métodos de las clases más a su derecha en la definición.


Encapsulación

    La encapsulación se refiere a impedir el acceso a determinados métodos y atributos de los objetos estableciendo así qué puede utilizarse desde fuera de la clase.

    En Python no existen los modificadores de acceso, y lo que se suele hacer es que el acceso a una variable o función viene determinado por su nombre: si el nombre comienza con dos guiones bajos (y no termina también con dos guiones bajos) se trata de una variable o función privada, en caso contrario es pública.

    En el siguiente ejemplo sólo se imprimirá la cadena correspondiente al
método publico(), mientras que al intentar llamar al método __privado() Python lanzará una excepción de que no existe (existe, pero no lo podemos ver porque es privado).


Encapsulación y empleo de Getters y Setters

    En ocasiones también puede suceder que queramos permitir el acceso a algún atributo de nuestro objeto, pero que este se produzca de forma controlada. Para esto podemos escribir métodos cuyo único cometido sea este, métodos que normalmente, por convención, tienen nombres como getVariable y setVariable; de ahí que se conozcan también con el nombre de getters y setters.

Ahora un ejercicio más completo utilizando clases, instancias y método constructor.

#Maricela Ocaña Martínez
#Objetivo: POO con Python
#Fecha: 29/Ago/2015

# -*- coding: utf-8 -*-
class ModeloDePresupuesto:
    # Datos comerciales
    titulo = "PRESUPUESTO"
    encabezado_nombre = "Eugenia Bahit"
    encabezado_web = "www.eugeniabahit.com.ar"
    encabezado_email = "mail@mail.com"

    # Datos impositivos
    alicuota_iva = 21

    # Propiedades relativas al formato
    divline = "="*80

    # Setear los datos del cliente
    def set_cliente(self):
        self.empresa = raw_input('\tEmpresa: ')
        self.cliente = raw_input('\tNombre del cliente: ')

    # Setear los datos básicos del presupuesto
    def set_datos_basicos(self):
        self.fecha = raw_input('\tFecha: ')
        self.servicio = raw_input('\tDescripción del servicio: ')
        importe = raw_input('\tImporte bruto: $')
        self.importe = float(importe)
        self.vencimiento = raw_input('\tFecha de caducidad: ')

    # Calcular IVA
    def calcular_iva(self):
        self.monto_iva = self.importe*self.alicuota_iva/100

    # Calcula el monto total del presupuesto
    def calcular_neto(self):
        self.neto = self.importe+self.monto_iva

    # Armar el presupuesto
    def armar_presupuesto(self):
        """
            Esta función se encarga de armar todo el presupuesto
        """
        txt = '\n'+self.divline+'\n'
        txt += '\t'+self.encabezado_nombre+'\n'
        txt += '\tWeb Site: '+self.encabezado_web+' | '
        txt += 'E-mail: '+self.encabezado_email+'\n'
        txt += self.divline+'\n'
        txt += '\t'+self.titulo+'\n'
        txt += self.divline+'\n\n'
        txt += '\tFecha: '+self.fecha+'\n'
        txt += '\tEmpresa: '+self.empresa+'\n'
        txt += '\tCliente: '+self.cliente+'\n'
        txt += self.divline+'\n\n'
        txt += '\tDetalle del servicio:\n'
        txt += '\t'+self.servicio+'\n\n'
        txt += '\tImporte: $%0.2f | IVA: $%0.2f\n' % (
                                  self.importe, self.monto_iva)
        txt += '-'*80
        txt += '\n\tMONTO TOTAL: $%0.2f\n' % (self.neto)
        txt += self.divline+'\n'
        print txt
  
    # Método constructor
    def __init__(self):
        print self.divline
        print "\tGENERACION DEL PRESUPUESTO"
        print self.divline
        self.set_cliente()
        self.set_datos_basicos()
        self.calcular_iva()
        self.calcular_neto()
        self.armar_presupuesto()

# Instanciar clase

presupuesto = ModeloDePresupuesto()

    Para más dudas consulta el Tutorial de Python 'Python para todos' y 'Maestros del Web'.

No hay comentarios:

Publicar un comentario