Está en la página 1de 13

2.

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.

El encapsulamiento de variables y métodos en un componente de software ordenado es,


todavía, una simple idea poderosa que provee dos principales beneficios a los
desarrolladores de software.
Ejemplo:

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

Instanciación de una clase:


Podemos interpretar que una clase es el plano que describe como es un objeto de la
clase, por tanto podemos entender que a partir de la clase podemos fabricar objetos. A
ese objeto construido se le denomina instancia, y al proceso de construir un objeto se le
llama instanciación.
Cuando se construye un objeto es necesario dar un valor inicial a sus atributos, es por ello
que existe un método especial en cada clase, llamado constructor, que es ejecutado de
forma automática cada vez que es instanciada una variable. Generalmente el constructor
se llama igual que la clase y no devuelve ningún valor. Análogamente, destructor es un
método perteneciente a una clase que es ejecutado de forma automática cuando un
objeto es destruido
>>> class Complejo:
... def __init__(self, partereal, parteimaginaria):
... self.r = partereal
... self.i = parteimaginaria
...
>>> x = Complejo(3.0, -4.5)
>>> x.r, x.i
(3.0, -4.5)
Clase instanciada:
La variable self es una instancia de la clase y es bueno aclarar que no es una palabra
reservada de python, cualquier etiqueta utilizada como primer parámetro tendría el mismo
valor (se desaconseja el uso de otras etiquetas por un tema de convención). O sea que,
cada vez que declaremos un método en python, vamos a tener que agregarle
la variable self para que cuando sea invocado el método, Python pase la clase
instanciada y opere con los valores actuales de esa instancia.
También en estas líneas almacenamos el atributo nombre en el parámetro nombre
(self.nombre = nombre) y también (self.especie = especie).

2.3

Referencia al objeto actual:


Cada vez que se crea una clase se añade otro tipo de dato que se puede utilizar igual que
uno de los tipos simples. Por ello al declarar una nueva variable, se puede utilizar un nombre
de clase como tipo. A estas variables se las conoce como referencias a objeto.
Todas las referencias a objeto son compatibles también con las instancias de subclases de
su tipo. Del mismo modo que es correcto asignar un byte a una variable declarada como int.

Ejemplo,
Referencia a un objeto

2.4

Que es un método o algoritmo, sintaxis de método en Python.


Formalmente se define un algoritmo como «un método de resolver un problema con una
serie de pasos precisa, definida y finita».[1] La precisión nos dice que un algoritmo debe
especificar la secuencia exacta en la que se deben ejecutar los pasos. La definición
requiere que si la secuencia de pasos se aplica sobre el mismo conjunto de datos
múltiples veces se obtenga el mismo resultado en todas las ocasiones. Finalmente, el
carácter finito de los algoritmos significa que deben terminar después de un número
determinado de pasos.[1]
Los algoritmos pueden ser correctos o incorrectos. Un algoritmo es correcto si para cada
posible entrada que recibe, termina con la salida correcta, es decir, un algoritmo
correcto resuelve un determinado problema. Por otro lado, un algoritmo incorrecto puede
que nunca termine o que termine, pero que proporcione una salida incorrecta como
solución al problema
Sintaxis:

Metodo de mensaje

Los métodos o funciones miembro se definen dentro de la clase a la que pertenecen y


constituyen la interfaz o forma de acceder a la estructura interna de los objetos es decir a
los datos privados.

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

Paso por valor[editar]


El paso de parámetros por valor consiste en copiar el contenido de la variable que queremos
pasar en otra dentro del ámbito local de la subrutina, consiste pues en copiar el contenido de
la memoria del argumento que se quiere pasar a otra dirección de memoria, correspondiente
al argumento dentro del ámbito de dicha subrutina. Se tendrán dos valores duplicados e
independientes, con lo que la modificación de uno no afecta al otro.
Paso por referencia[editar]
El paso de parámetros por referencia consiste en proporcionar a la subrutina a la que se le
quiere pasar el argumento la dirección de memoria del dato. En este caso se tiene un único
valor referenciado (o apuntado) desde dos puntos diferentes, el programa principal y la
subrutina a la que se le pasa el argumento, por lo que cualquier acción sobre el parámetro se
realiza sobre la misma posición de memoria.
El paso de la dirección de memoria debe ser transparente al programador. Los lenguajes que
permiten tratar con direcciones de memoria, como C, permiten simular el paso de argumentos
por referencia, sin disponer realmente de esta característica.

Retorno de valores: Devolución de los valores, retorno múltiple


Devolucion de valores:
Puede ser cualquier tipo de dato salvo un array o una función. Además, el valor de la
expresión debe coincidir con el tipo de dato declarado en el prototipo de la función. Por
otro lado, existe la posibilidad de devolver múltiples valores mediante la utilización de
punteros o estructuras.
Hay que tener en cuenta que existen funciones que no devuelven ningún valor. El tipo de
dato devuelto por estas funciones puede ser void, considerado como un tipo especial de
dato.

Retorno multiple:

En Python, una función puede retornar más de un valor.

Por ejemplo, la siguiente función recibe una cantidad de segundos, y retorna el


equivalente en horas, minutos y segundos:

def convertir_segundos(segundos):
horas = segundos / (60 * 60)
minutos = (segundos / 60) % 60
segundos = segundos % 60
return horas, minutos, segundos

Al llamar la función, se puede asignar un nombre a cada uno de los valores


retornados:

>>> h, m, s = convertir_segundos(9814)
>>> h
2
>>> m
43
>>> s
34

Técnicamente, la función está retornando una tupla de valores, un tipo de datos


que veremos más adelante:

>>> 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:

Que son los destructores:


Es una función miembro especial llamadas automáticamente en la ejecución del programa, y
por tanto no tienen por qué ser llamadas explícitamente por el programador. Sus principales
cometidos son:

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

Sintaxis para la declaración de un destructor


La sintaxis para declarar un destructor es:
[atributos] ~ <identificador> ( )
Notas:
-Una clase solamente puede tener un destructor.
-Los destructores no pueden heredarse o sobrecargarse.
-Los destructores no pueden invocarse, sino que son invocados automáticamente.
-Un destructor no acepta modificadores ni parámetros.

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:

 Los métodos sobrecargados deben de cambiar la lista de argumentos.


 Pueden cambiar el tipo de retorno.
 Pueden cambiar el modificador de acceso.
 Pueden declarar nuevas o más amplias excepciones.
 Un método puede ser sobrecargado en la misma clase o en una subclase.

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:

La sobrecarga de operadores es la capacidad para transformar los operadores de un lenguaje como


por ejemplo el +, -, etc, cuando se dice transformar se refiere a que los operandos que entran en juego
no tienen que ser los que admite el lenguaje por defecto. Mediante esta técnica podemos sumar dos
objetos creados por nosotros o un objeto y un entero, en vez de limitarnos a sumar números enteros
o reales, por ejemplo.
La sobrecarga de operadores ya era posible en c++ y en otros lenguajes, pero sorprendentemente java
no lo incorpora, así que podemos decir que esta característica es una ventaja de c# respecto a java,
aunque mucha gente, esta posibilidad, no lo considera una ventaja porque complica el código.

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.

Estos operadores, el incremento y el decremento, pueden utilizarse de dos maneras, eso


depende del orden de aparición de los mismos:

 Si el operador precede al operando el valor del operando se modifica antes de


ser utilizado.
 Si el operador aparece después del operando, este se modifica después de ser utilizado.

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

type operator operator-symbol ( parameter-list )

Ejemplo:

También podría gustarte