1+ """
2+ 08 - CLASES
3+ Autor de la solución: Oriaj3
4+ Teoría:
5+ Las clases son una forma de organizar y estructurar el código.
6+ En la mayoría de los lenguajes de programación, las clases son la base de la
7+ programación orientada a objetos.
8+
9+ Una clase es una plantilla para crear objetos. Un objeto es una instancia de una
10+ clase. Cuando se crea un objeto, se le asigna un espacio en memoria y se le
11+ asignan los atributos y métodos de la clase.
12+
13+ Las clases pueden tener atributos y métodos:
14+ *Los atributos son variables que pertenecen a la clase.
15+ *Los métodos son funciones que pertenecen a la clase.
16+
17+ También pueden tener un inicializador, que es un método especial que se ejecuta
18+ cuando se crea un objeto.
19+
20+ En Python, las clases se definen con la palabra clave class, seguida del nombre
21+ de la clase y dos puntos. Los atributos y métodos de la clase se definen dentro
22+ de la clase, con sangría.
23+
24+ Ejemplo:
25+ class Persona:
26+ def __init__(self, nombre, edad):
27+ self.nombre = nombre
28+ self.edad = edad
29+
30+ def saludar(self):
31+ print(f'Hola, me llamo {self.nombre} y tengo {self.edad} años')
32+
33+ También existen los destructores y los métodos estáticos, pero no son tan
34+ comunes. En python se definen con las palabras clave __del__ y @staticmethod
35+ respectivamente.
36+
37+ Para crear un objeto de una clase, se llama al nombre de la clase como si fuera
38+ una función, pasando los argumentos que requiera el inicializador.
39+
40+ Ejemplo:
41+ persona1 = Persona('Juan', 25)
42+ persona1.saludar()
43+
44+ En este ejemplo, se crea un objeto de la clase Persona, con el nombre 'Juan' y
45+ la edad 25. Luego se llama al método saludar del objeto persona1.
46+
47+ Para acceder a los atributos y métodos de un objeto, se utiliza la notación de
48+ punto.
49+
50+ Ejemplo:
51+ print(persona1.nombre)
52+
53+ También es importante mencionar que en Python, todos los atributos y métodos de
54+ una clase son públicos, a menos que se especifique lo contrario. Esto significa
55+ que se pueden acceder y modificar desde cualquier parte del código.
56+
57+ Ejemplo:
58+ persona1.nombre = 'Pedro'
59+
60+ En este ejemplo, se cambia el nombre del objeto persona1 a 'Pedro'.
61+
62+ Ejemplo private:
63+ class Persona:
64+ def __init__(self, nombre, edad):
65+ self.__nombre = nombre
66+ self.__edad = edad
67+
68+ def saludar(self):
69+ print(f'Hola, me llamo {self.__nombre} y tengo {self.__edad} años')
70+
71+ En este ejemplo, se utiliza dos guiones bajos antes del nombre de los atributos
72+ """
73+
74+ # EJERCICIO BÁSICO:
75+ """
76+ EJERCICIO:
77+ Explora el concepto de clase y crea un ejemplo que implemente un inicializador,
78+ atributos y una función que los imprima (teniendo en cuenta las posibilidades
79+ de tu lenguaje).
80+ Una vez implementada, créala, establece sus parámetros, modifícalos e imprímelos
81+ utilizando su función.
82+ """
83+
84+ class persona1 :
85+ def __init__ (self , nombre , edad ) -> None :
86+ self .__nombre = nombre
87+ self .__edad = edad
88+
89+ def setNombre (self , nombre ) -> None :
90+ self .__nombre = nombre
91+
92+ def getNombre (self ) -> str :
93+ return self .__nombre
94+
95+ def setEdad (self , edad ) -> None :
96+ self .__edad = edad
97+
98+ def getEdad (self ) -> str :
99+ return self .__edad
100+
101+ def print (self ) -> None :
102+ print (f"La persona se llama { self .__nombre } y tiene { self .__edad } años." )
103+
104+ pepe = persona1 ("Pepe" , 23 )
105+
106+ pepe .print ()
107+
108+ pepe .setNombre ("Juan" )
109+ pepe .setEdad (25 )
110+
111+ pepe .print ()
112+
113+ print (pepe .getNombre ())
114+ print (pepe .getEdad ())
115+
116+ """
117+ DIFICULTAD EXTRA (opcional):
118+ Implementa dos clases que representen las estructuras de Pila y Cola (estudiadas
119+ en el ejercicio número 7 de la ruta de estudio)
120+ - Deben poder inicializarse y disponer de operaciones para añadir, eliminar,
121+ retornar el número de elementos e imprimir todo su contenido.
122+ """
123+
124+ class pila :
125+ lista = []
126+
127+ def anadir (self , elemento ) -> None :
128+ self .lista .append (elemento )
129+
130+ def sacar (self ) -> any :
131+ return self .lista .pop ()
132+
133+ def tamano (self ) -> int :
134+ return len (self .lista )
135+
136+ def imprimir (self ) -> None :
137+ print (self .lista )
138+
139+ # Ejemplo de uso
140+ p = pila ()
141+ p .anadir (1 )
142+ p .anadir (2 )
143+ p .anadir (3 )
144+
145+ print ("LISTAS....." )
146+ p .imprimir ()
147+ print (f"El tamaño es: { p .tamano ()} " )
148+ print (p .sacar ())
149+ p .imprimir ()
150+ print (f"El tamaño es: { p .tamano ()} " )
151+
152+
153+ class cola :
154+ cola = []
155+
156+ def anadir (self , elemento ) -> None :
157+ self .cola .append (elemento )
158+
159+ def sacar (self ) -> any : # Add return type annotation
160+ return self .cola .pop (0 )
161+
162+ def tamano (self ) -> int :
163+ return len (self .cola )
164+
165+ def imprimir (self ) -> None :
166+ print (self .cola )
167+
168+ # Ejemplo de uso
169+ c = cola ()
170+ c .anadir (1 )
171+ c .anadir (2 )
172+ c .anadir (3 )
173+
174+ print ("COLAS....." )
175+ c .imprimir ()
176+ print (f"El tamaño es: { c .tamano ()} " )
177+ print (c .sacar ())
178+ c .imprimir ()
179+ print (f"El tamaño es: { c .tamano ()} " )
180+
181+
182+
0 commit comments