Mostrando entradas con la etiqueta Objeto. Mostrar todas las entradas
Mostrando entradas con la etiqueta Objeto. Mostrar todas las entradas

jueves, 13 de junio de 2024

POO

 Clase y objeto

Después de introducirnos en los conceptos básicos de la POO, en esta entrada vamos a aprender a identificar y crear (en abstracto) una clase y un objeto o instancia de esa clase. Esto nos servirá de base para iniciarnos en la práctica de la POO en lenguajes de programación, y más concretamente en Python.



Una clase se define, como vimos en la entrada anterior, por ser una representación abstracta de objetos concretos que son, a su vez, instancias o concreciones de esa clase. La clase posee características (en POO atributos) y funcionalidades (que se concretan mediante funciones y que en POO se denominan métodos). La POO permite tratar ambas (características y funciones -> atributos y métodos) como un todo, lo que facilita el manejo del código.

Para crear una clase debemos utilizar la palabra reservada (por ejemplo Class), y darle un nombre identificador. Por convención, los nombres de las clases se inician con mayúscula, lo que la diferencian del nombre del objeto y de los métodos de la clase. Según los lenguajes, este proceso inicial puede precisar ser marcado de algún modo, por ejemplo, mediante (:) En Python...

class ClaseNombre:

El paso siguiente es utilizar un constructor de la clase, variando de procedimiento según en el lenguaje. En Python se realiza como sigue:

  • definimos una función especial que consta de las siguientes partes:
    • El definidor def 
    • El nombre de la función __init__, que se caracteriza por ir precedido y seguido por dos guiones bajos sucesivos.
    • Y la definición de parámetros, que inician por convención por el parámetro self, que hace referencia a la clase y a su constructor.
    • finalizando mediante :, como cualquier otra función.

def __init__(self,param1,param2):

  •  referenciamos los parámetros que nos permiten identificar y dar valor inicial a los atributos de la clase, utilizando la referencia a la propia clase y a su constructor, a la que queda asociado el atributo mediante la sintaxis del punto:

self.param1 = param1
self.param2 = param2 

Finalmente creamos los métodos, de modo similar a como creamos las funciones. Estos métodos pueden contar con parámetros (o no) y devolver (return) datos (o no). En su formulación más simple (sin parámetros ni retorno) se expresan (en Python) como sigue:

def metodo1(self):
contenidoDelMétodo

Instanciar un objeto de la clase anterior consiste, básicamente, en hacer referencia de esa clase a la hora de declarar el objeto para posteriormente acceder a sus atributos y a sus métodos recurriendo a la sintaxis del punto.
  • Nombramos (declaramos) la instancia u objeto asociándolo a modo de variable a la clase y concretando como argumentos sus atributos. En Python...
mi_objeto = ClaseNombre(ValorArg1,ValorArg2) -> Los argumentos son concreciones de los
atributos de la clase en el objeto.
  • Accedemos a los atributos mediante la sintaxis del punto
mi_objeto.param1 (Recuerda que el parámetro es en realidad el atributo1 de la clase que se ha
           concretado en la creación  del objeto como ValorArg1)
  • y de forma similar a los métodos
mi_objeto.metodo1()

Como un ejemplo puede aclarar mucho más las cosas, paso a desarrollar uno a partir de Python. El objetivo es mostrar el desarrollo de una concreción del proceso anterior siguiendo las explicaciones que proporciona Eric Matthes (2020:181-185)

  • Clase Perro

class MiPerro:

 def __init__(self,nombre,edad):

self.nombre = nombre

self.edad = edad 

 def sentarse(self):

         print(f"{self.nombre} se sienta cuando se lo ordeno (y quiere, claro).")

  • Instancia u objeto de la clase MiPerro

perrita = MiPerro("Atenea",10)

  • Acceso a los atributos de perrita:

 print(f"Mi perrita se llama {perrita.nombre} y tiene {perrita.edad} años")

  • Acceso al método creado en la clase

perrita.sentarse() 

Puedes comprender que es posible desarrollar clases mucho más complejas en cuanto a atributos y métodos, así como crear tantas instancias de la clase (objetos) como necesitemos en nuestro programa, pero para el propósito de esta entrada es suficiente con lo anterior. Su resultado (output) es el siguiente:

Mi perrita se llama Atenea y tiene 10 años
Atenea se sienta cuando se lo ordeno (y quiere. claro).