Clase: Una clase es una plantilla para la creación de objetos de datos según un modelo
predefinido. Las clases se utilizan para representar entidades o conceptos, como
los sustantivos en el lenguaje. Cada clase es un modelo que define un conjunto
de variables -el estado, y métodos apropiados para operar con dichos datos -el
comportamiento. Cada objeto creado a partir de la clase se denomina instancia de la
clase.
Ejemplo:
class MiClase:
"""Simple clase de ejemplo"""
i = 12345
def f(self):
return 'hola mundo'
Atributo de clase: Los atributos, también llamados datos o variables miembro son
porciones de información que un objeto posee o conoce de sí mismo. Una clase puede
tener cualquier número de atributos o no Tener ninguno. Se declaran con un identificador
y el tipo de dato correspondiente.
Ejemplo:
x.contador = 1
while x.contador < 10:
x.contador = x.contador * 2
print(x.contador)
del x.contador
Encapsulamiento.
Como se puede observar de los diagramas, las variables del objeto se localizan en el centro
o núcleo del objeto. Los métodos rodean y esconden el núcleo del objeto de otros objetos
en el programa. Al empaquetamiento de las variables de un objeto con la protección de sus
métodos se le llama encapsulamiento. Típicamente, el encapsulamiento es utilizado para
esconder detalles de la puesta en práctica no importantes de otros objetos. Entonces, los
detalles de la puesta en práctica pueden cambiar en cualquier tiempo sin afectar otras
partes del programa.
Modularidad.
esto es, el código fuente de un objeto puede ser escrito, así como darle mantenimiento,
independientemente del código fuente de otros objetos. Así mismo, un objeto puede ser
transferido alrededor del sistema sin alterar su estado y conducta.
Ocultamiento de la información, es decir, un objeto tiene una "interfaz publica" que otros
objetos pueden utilizar para comunicarse con él. Pero el objeto puede mantener información
y métodos privados que pueden ser cambiados en cualquier tiempo sin afectar a los otros
objetos que dependan de ello.
Los objetos proveen el beneficio de la modularidad y el ocultamiento de la información. Las
clases proveen el beneficio de la reutilización. Los programadores de software utilizan la
misma clase, y por lo tanto el mismo código, una y otra vez para crear muchos objetos.
Ejemplo:
import saludo
saludo.saludoEntidad("todos")
saludo.saludoEntidad("programming historian")
Ejemplo declaración de clase:
class MiClase:
"""Simple clase de ejemplo"""
i = 12345
def f(self):
return 'hola mundo'
2.2
2.3
Ejemplo,
Referencia a un objeto
2.4
Metodo de mensaje
Los métodos definen cual son las operaciones que se pueden realizar con los atributos de
los objetos de la clase. La ejecución de un programa orientado a objetos consiste, en recibir,
interpretar y responder unos objetos a los mensajes que envían otros objetos.
Comunicación entre objetos: Cuando se produce un evento, el objeto receptor sabe cual
es el objeto emisor, que evento se produjo y el valor de los datos asociados con dicho
evento.
-Un objeto sin comunicación con el mundo exterior no es de utilidad. La idea no es crear
islas de objetos si no objetos relacionados.
-Los objetos interactúan entre ellos mediante mensajes.
-Cuando un objeto A quiere que otro objeto B ejecute una de sus funciones o
procedimientos miembro (métodos de B), el objeto A manda un mensaje al objeto B.
Activación y mensaje de un objeto.
En el contexto del software o aplicaciones, se puede decir también «activar este
software/aplicación/producto». En este caso significa que se debe realizar el
procedimiento de validación de licencia requerido por algunos programas para poder
utilizarlos. Este proceso se puede hacer introduciendo un número serial (obtenido al
comprar el programa o por métodos ilegales como cracks) o puede ser registrándose en
un determinado sitio web o desde la misma aplicación, etc
Retorno multiple:
def convertir_segundos(segundos):
horas = segundos / (60 * 60)
minutos = (segundos / 60) % 60
segundos = segundos % 60
return horas, minutos, segundos
>>> h, m, s = convertir_segundos(9814)
>>> h
2
>>> m
43
>>> s
34
>>> convertir_segundos(9814)
(2, 43, 34)
2.5
Que son los contructores:
un constructor es una subrutina cuya misión es inicializar un objeto de una clase. En el
constructor se asignan los valores iniciales del nuevo objeto.
Se utiliza para crear tablas de clases virtuales y poder así desarrollar el polimorfismo, una de
las herramientas de la programación orientada a objetos. Al utilizar un constructor,
el compilador determina cual de los objetos va a responder al mensaje (virtual) que hemos
creado. Tiene un tipo de acceso, un nombre y un paréntesis.
Sintaxis para la declaración de un constructor:
La sintaxis para la declaración de un método constructor es:
[atributos] [modificadores] <identificador> ( [parámetros] ) [inicializador]
{
// Cuerpo del constructor.
}
Donde:
atributos (opcional) es información declarativa adicional.
modificadores (opcional) se restringen a extern y a los modificadores de acceso.
identificador es el nombre del método constructor (igual al nombre de la clase).
parámetros (opcional) es la lista de parámetros pasados al constructor.
inicializador (opcional). Con el inicializador, el constructor invoca previamente a otro
constructor.
Cuerpo del constructor es el bloque de programa que contiene las instrucciones para
inicializar la instancia de clase (objeto).
Ejemplo:
liberar los recursos computacionales que el objeto de dicha clase haya adquirido en su
tiempo de ejecución al expirar éste.
quitar los vínculos que pudiesen tener otros recursos u objetos con éste.
Los destructores son invocados automáticamente al alcanzar el flujo del programa el fin del
ámbito en el que está declarado el objeto.
Ejemplo:
2.6
Que es una sobrecarga de métodos
Algunos métodos en una clase pueden tener el mismo nombre. Estos métodos deben contar
con diferentes argumentos. El compilador decide qué método invocar comparando los
argumentos. Se generara un error si los métodos tienen definidos los mismos parámetros.
Un método sobrecargado se utiliza para reutilizar el nombre de un método pero con diferentes
argumentos (opcionalmente un tipo diferente de retorno). Las reglas para sobrecargar un método son
las siguientes:
Utilización y ejemplo:
Lo que define qué método es el que se va a llamar son los argumentos que se envían al mismo durante
la llamada. Si se invoca a un método con un String como argumento, se ejecutará el método que tome
un String como argumento, si se manda a llamar al mismo método pero con un float como argumento,
se ejecutará el método que tome un float como argumento y así sucesivamente. Si se invoca a un
método con un argumento que no es definido en ninguna de las versiones sobrecargadas entonces el
compilador arrojará un mensaje de error.
Reglas de la sobrecarga y sobreescritura de métodos:
Ahora que hemos visto ambas formas de reescribir métodos, revisemos las reglas y diferencias entre
ambos tipos de reescritura:
Argumentos: En un método sobrecargado los argumentos deben de cambiar mientras que
en un método sobreescrito NO deben cambiar.
El tipo de retorno: En un método sobrecargado el tipo de retorno puede cambiar, en un
método sobreescrito NO puede cambiar, excepto por subtipos del tipo declarado originalmente.
Excepciones: En un método sobrecargado las excepciones pueden cambiar, en un método
sobreescrito pueden reducirse o eliminarse pero NO deben de arrojarse excepciones nuevas o más
amplias.
Acceso: En un método sobrecargado puede cambiar, en un método sobreescrito el acceso
NO debe de hacerse más restrictivo (puede ser menos restrictivo).
Al invocar: En un método sobrecargado los argumentos son los que determinan qué
método es el que se invocará, en un método sobreescrito el tipo de objeto determina qué método es
elegido.
sintaxis
En Python no existe sobrecarga de métodos (el último método sobreescribiría la implementación
de los anteriores), aunque se puede conseguir un comportamiento similar recurriendo a
funciones con valores por defecto para los parámetros o a la sintaxis *params o **params
explicada en Python: Funciones, o bien usando decoradores (mecanismo que veremos más
adelante).
2.7
Concepto y utilidad:
Operadores unitarios:
incluye una clase de operadores que actúan sobre un solo operador para producir un nuevo valor.
Por eso el nombre de unarios, por que para poder funcionar solo necesitan de un operador.
Ejemplo:
Operadores binarios:
Para empezar vamos a sobrecargar el operador suma('+') para que al sumar dos objetos de la clase
ComplexNum, es decir dos números complejos obtengamos un número complejo que será la suma
de ambas partes. Cabe destacar que los prototipos para sobrecargar operadores serán:
public static Operando operator+(Operando a, Operando b)
Sintaxis
Ejemplo: