![]() |
Aprendiendo POO me he topado con un error con public Hola a tod@s, hace poco me he comprado un libro de PHP5 "PHP5 - Manuales imprescindibles de Anaya ISBN: 84-415-1785-1" Y lo primero que he hecho ha sido empaparme del "Capitulo 9: Programación orientada a objetos"... Me lo he leido entero y repasado, los dias siguientes. Aunque sé que estoy muy verde todavía. Bueno el caso es que despues de leer me he puesto a probar una cosita que me reconcomia jejeje... Y es la herencia encadenada... Pues yo siempre habia pensado que como no es herencia multiple, lo que es la herencia encadenada tampoco se podia hacer. Pero he visto que si. Entonces, me he puesto manos a la obra y he hecho 3 clases ('A', 'B' y 'C') de tal forma que 'C' hereda de 'B' y esta hereda de 'A'. Con la intención de ver si la visibilidad de los miembros de 'A' llega a 'C'. es decir, si la herencia pasa de 'A' a 'B' y 'C'. Antes de poner el codigo voy a poner las versiones del server, apache, php, extensiones etc... Cita:
Código PHP: Bueno os pongo el error que me da con el "public"... Cita:
y gracias de antemano. |
Re: Aprendiendo POO me he topado con un error con public ¬¬ Código PHP: Saludos. |
Re: Aprendiendo POO me he topado con un error con public ¬¬ xD OMG ya me vale... Gracias tio... ( esto me pasa por copiar el codigo que yo mismo escribí lol... xD )... aishhhh Gracias por el aviso de los privates ;) lo sé... pero para el ejemplo lo he obviado... como decia una cancion... "ya habrá tiempo para florituras" Muchas gracias... |
Re: Aprendiendo POO me he topado con un error con public ¬¬ Pongo el ejemplo completo y terminado de herencia encadenada comprobado [Funciona] ;) Código PHP: |
Re: Aprendiendo POO me he topado con un error con public ¬¬ No se trata de "florituras", se trata de hacer las cosas bien :P. Ademas, si ya estas utilizando metodos tipo set/get no veo por que te estás tardando en pasar esos atributos a privados jeje. Y yo tambien estoy aprendiendo ;-) |
Re: Aprendiendo POO me he topado con un error con public ¬¬ Por que xD como decía, prefiero asimilar bien primero el concepto de herencia simple y/o encadenada... Además soy duro de moyera xDD jajaja... pero sí, proximamente me dedicaré a hacerlo con funciones __set y __get y toda la retahíla de funciones MAGICASSSS jejeje.... ok ok, me lo apunto ;) Pero poquito a poco... buena letra y sin rayadas xD ke sino uno se sobrecarga jejeje |
Re: Aprendiendo POO me he topado con un error con public ¬¬ Mmmm.... (me estoy cansando de repetirlo)... es un tema conceptual. Los atributos públicos *están prohibidos* en la POO y es el primer error grave que cometen los novatos. Si dejas los atributos públicos significa que no entiendes el significado de "encapsulación", lo cual es otro fallo de desconocimiento en los principios de la POO. Y si no te preocupas por los conceptos base, no tienen sentido aprender solo sintaxis, otro gran problema de la mayoría de los libros sobre OO y PHP. |
Re: Aprendiendo POO me he topado con un error con public ¬¬ No sé quién es el autor, pero no tiene sentido el término de "herencia encadenada". Generalmente se habla de herencia simple o múltiple, pero lo que describe como "encadenada" es una jerarquía completamente habitual al usar "generalización" o "especialización" de clases. Es decir, si usas herencia en más de un nivel (que no tiene nada de extraño) estarías haciendo lo que dice como "encadenada" y ponerle nombre a algo tan elemental no le veo sentido. |
Re: Aprendiendo POO me he topado con un error con public ¬¬ Hola enriqueplace, Gracias por el aporte, seguro me será muy util. Comparto lo que dices tanto en que 'es un tema conceptual' en que los atributos publicos *están prohibidos*. Te agradezco la alusión al concepto de encapsulación, leeré sobre ello. Bueno, hay una cosa que discrepo un poco... jeje Cita:
Mmmm... en el libro pone que el autor es "Luis Miguel Cabezas Granado"... Además pone "Prólogo de Zeev suraski y Andi Gutmans" nombres que particularmente yo no conozco, pero no me importa, el libro lo cojí por que me parecía bueno para aprender, ya que tiene una presentación muy limpia, clara y eso lo hace agradable de leer y funcional. Hay que tener claro que es un libro de aprendizaje y a nivel de bajo a medio, el libro no buscará profundizar ni se especializará, pero enseñar php de una buena manera a nivel medio lo creo con creces. En cuanto a lo de la 'herencia encadenada', bueno si, es simplemente un termino... mejor o peor usado, me refería a lo que tu has preferido llamar (seguro de una forma mas correcta) nivel de herencia, sin especificar un nombre... Para mi lo de 'herencia encadenada' era unicamente un recurso que me ayudaba a comprender una de las formas en la que el codigo puede ser extendido. Por ultimo, he leido un post tuyo en tu blog de 'PHPSenior' sobre la herencia... que creo que releeré unas cuantas veces a lo largo del tiempo. jeje Gracias por la respuesta ;) |
Re: Aprendiendo POO me he topado con un error con public ¬¬ Cita:
El punto es: la herramienta no es lo importante en sí, lo importante es qué puedes hacer con ella. Cita:
Cita:
Cita:
Y uno de los grandes problemas son por pensar solo en el lenguaje y no en la arquitectura como un todo. |
Re: Aprendiendo POO me he topado con un error con public ¬¬ Sí, creo que la reflexión me parece correcta. A mi me preocupa también lo que dices, sé o creo saber, claro lo que sale en el capitulo de este libro, es una aproximación, descriptiva y breve de los principios de POO y un ejemplo breve... Presupongo hay mucho mas, y me importa mas aprender a programar, que aprender php... Ahora estaba leyendo unas cosas nuevas para mi y por lo poco que he leido algo complejas tambien... son los 'patrones de diseño' en concreto he mirado el singleton, que casualidades de la vida, me he vuelto a topar con un post tuyo de PHPSenior en las tipicas busquedas por google y la wiki xD... y bueno lo he entendido el singleton bien bien... he visto que hay diferentes tipos de patrones ( para creación, estructurales, de comportamiento... ) aunque por ahora paso de discutir sobre esto... pues no sabria bien como o cuando deberia implementarlos... me hago una idea... pero realmente creo necesitaría bastante mas practica y experiencia. Mmmmmmm.... Hubo un tiempo en el que yo... solo pensaba en aprender php.... ejem.... bueno me aprendí toda la sintaxis si xDDD jaja... despues vi, me di cuenta, que con eso... bueno si, yo sabia con que cosas podia hacer otras cosas... pero que en realidad no sabia utilizarlas si no era mas que para un pequeño script... esto me frustraba. Entonces poco a poco he ido haciendo timidos acercamientos a POO, y este ultimo es un poquito mas fuerte y mas decidido jeje y con bastante precaucion. Iré estudiando los principios de la POO... La verdad es que desde que he aprendido lo de la herencia y como poder reutilizar el codigo,... desarrollar webs me parece algo mas facil :) Saludos |
Re: Aprendiendo POO me he topado con un error con public ¬¬ Última sugerencia, para que veas que "herencia" no es algo que debe usarse a diestra y siniestra, lee el "Principio de Liskov". |
Re: Aprendiendo POO me he topado con un error con public |
Re: Aprendiendo POO me he topado con un error con public Bueno asi a tontas y a lokas xD (por ke para ser sinceros, no me lo he mirado mucho) creo haber entendido ke el "Principio de Liskov" explica entre otras cosas supongo o con matices... que a medida que vas haciendo herencias y se va prolongando la cosa... es mas facil ke surjan los errores si no se ha echo to de una forma digamos "correcta"... conceptos de especifidad y todo eso todavía son munnncho pa mi xDDD jejeje De todas formas ^_^ Muchas gracias por la información. Me gustaría poder amueblar en mi cabecita loka, ideas generales para poder aclararme sobre lo ke son y/o como se usan, cuales son etc... arquitecturas, patrones de diseño, conceptos poo, aprender a implementar... Creo que es el buen camino, aunque no precisamente por ese orden :S Cualquier aporte o indicación a nivel asesor xD me será útil B** Muchas gracias xD, no conocia la pagina y parece estar bien explicado... Además tenía ganas de volver a mirarme los conceptos de poo ahora jiji... me viene de perlas ;) |
Re: Aprendiendo POO me he topado con un error con public Cita:
Cita:
Generalmente hago el mismo chiste cuando trato el tema en un curso: "un docente es una persona, pero no basta, debe comportarse como tal". Otro ejemplo más real: tienes un sistema que liquida sueldos, una clase base "Empleado" y subclases Gerente, Desarrollador, Administrativa y Becario (asumamos que el último no cobra sueldo). Usas polimorfismo y recibe el método "liquidarSueldo" objetos de tipo Empleado. Bien, cuando en un momento recibes de tu lista de empleados un becario, que debe hacer el sistema?
Supongamos que el 1) no es aceptable por el gasto de papel y te piden que no se impriman (no tiene sentido), pasamos al punto 2), agregamos un "if". ¿No estamos "codificando a fuego" nuestro sistema para un comportamiento particular? rompiendo el polimorfismo, justamente, el patrón estratégico más importante que tiene la POO. Cada vez que tenemos que cambiar nuestro código generamos nuevos costos y nuevos posibles errores. Por eso cada vez nos cuesta más desarrollar un sistema, hasta que tenemos que tirarlo y desarrollar otro de cero... y empezamos otra vez con los problemas del mal diseño. Los principios de diseño te dicen que "desarrolla cerrado al cambio y abierto a la extensión" (Principio Open/Closed, "Abierto / Cerrado"). Por ejemplo, tu código debe ser reutilizable (¿no es la idea de la OO?) y con solo agregar código sin tocar el existente lograrás ir adecuarte a los cambios, a los nuevos requerimientos. No te olvides que nuestro código lo usan muchos otros objetos, si este cambiara, generaría un efecto en cadena, posiblemente, dejando de funcionar lo ya existente y tener que modificar más objetos. Esta forma de "extensión" es agregar más clases a la herencia y el método "liquidarSueldo" no se modifica, pero si tu no haces correctas herencias, no puedes hacer lo primero, por lo tanto tu sistema se degradará en cascada. Esta simple tontería el autor demuestra con muchos ejemplos que hacer "herencia por herencia", "por reutilizar código", no es suficiente y genera grandes problemas en los diseños. Es una de las razones que me ven de mal humor cuando veo que implementan herencia a los golpes, prueba y error, con el argumento solo de "reutilizar código" :'( |
Re: Aprendiendo POO me he topado con un error con public Gracias Enriqueplace. Me sirve de mucho lo que me vas contando. Por que precisamente lo que mas me confunde a la hora de ponerme a hacer algo... es si esa es la forma correcta de hacerlo; - "no me podrás negar, que complejo si viene siendo..." Creo que ahora lo que necesito es darme a mi mismo un poco de tiempo, para leer, asimilar e interiorizar los conceptos... a base de leer y probar. De nuevo gracias ;) |
| La zona horaria es GMT -6. Ahora son las 10:33. |
Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.