domingo, 8 de junio de 2014

LOS 10 HÁBITOS DE LAS PAREJAS FELICES

Quienes conservan una relación amorosa y duradera suelen mantener costumbres sencillas, como irse a la cama a la misma hora o decir ‘te amo’ todos los días.

Mark Goulston es psiquiatra, consultor y conferencista internacional, autor de libros como Los 6 secretos de una relación duradera: cómo enamorarse de nuevo. Y en esta ocasión, reveló para la revista científica Psychology Today los 10 hábitos que mantienen y alimentan a diario las parejas felices:

1. Irse a la cama al mismo tiempo: al comienzo de la relación, la pareja no puede esperar el momento de irse juntos a la cama. Pues resistirse a cambiar los horarios a medida que pasa el tiempo, es uno de esos secretos.  El diálogo y el roce de la piel mientras están cerca en la cama, contribuye a estimular la comunicación y el deseo sexual.

2. Cultivar los intereses comunes: pasar el tiempo juntos y soñar en común es fundamental. Porque la pasión de los primeros momentos desciende, pero disfrutar el tiempo en compañís contribuye a romper la rutina. Es importante también cultivar gustos individuales para no verse y ser dependientes.

3.  Caminar de la mano: ir juntos, paralelos cuando vayan por la calle. No uno detrás del otro.

4. Principio de buena fe: confianza y perdón son ingredientes fundamentales en las parejas.  Cuando haya un desacuerdo, estos son los sentimientos que deben primar antes que desconfiar. Como dice la ley: “Todos son inocentes hasta que se demuestre lo contrario”.

5. Concentrarse en las cualidades de la pareja: y no anteponer sus defectos. Aunque todos tenemos cualidades y fallas, las parejas felices se enfocan en los aspectos positivos.

6. Abrazarse: la piel tiene memoria y recordará el contacto tosco, como el amoroso. Por eso, un buen abrazo al comienzo o al final del día es estimulante.

7. Decir ‘te amo’ y ‘ten un lindo día’ todas las mañanas: estas frases son un aliciente para empezar días en los que nos enfrentamos a atascos de tráfico y en general, a los altibajos de la cotidianidad.

8. Decir buenas noches siempre: sin importar cómo se sientan, si están molestos o no de tan buen ánimo. Lo que tienes con tu pareja es más importante que cualquier pequeño incidente.

9. Llamar durante el día: escuchar a la persona amada siempre va a ser una motivación para continuar el día. Estar pendiente de sus actividades y comprender las emociones que cada uno vive en su trabajo es parte de la rutina de una pareja feliz. 

10. Sentirse orgulloso de ser vistos en pareja: es una manera de decir que se pertenecen entre sí, cuando hay una visibilidad pública de los dos y hay un contacto como los besos, los abrazos o las caricias. 

http://www.fucsia.co/sexo-y-relaciones/vida-en-pareja/articulo/los-10-habitos-parejas-felices/44268#.U5OlJHJ_trQ

 

Consejos ante un siniestro de tu coche


Si has tenido un accidente con tu coche y su reparación supone un gran desembolso económico, deberías saber cómo actuará la aseguradora y cuáles son tus derechos. Te contamos los entresijos sobre cómo se liquida un siniestro.
Consejos ante un siniestro de tu coche

Esperemos que no te pase nunca pero, si por desgracia has tenido un accidente y tu coche está destrozado comenzarán a surgirte un montón de dudas sobre qué tienes que hacer con él. El primer paso es llamar a tu compañía de seguros para que se haga cargo del vehículo y su traslado al taller que corresponda. Será el perito quien dictamine si el coche es o no susceptible de ser reparado o lo declara siniestro total.

En la mayoría de las pólizas suele establecerse que existe «pérdida total» cuando el importe presupuestado de la reparación supera el 75 por ciento del valor en venta del vehículo inmediatamente anterior a cuando ocurrió el siniestro (o el 100% en otras compañías). Si se da esta circunstancia, la aseguradora no estaría obligada a reparar el vehículo sino a pagar el importe de la indemnización convenida en la póliza.

Quién tiene la culpa

A la hora de liquidar un siniestro puedes encontrarte con dos variantes posibles, dependiendo de quién haya tenido la culpa del accidente. Así lo explica Automovilistas Europeos Asociados (AEA). Si la culpa es del otro, como perjudicado del siniestro,tienes derecho a que te indemnicen íntegramente todos daños y perjuicios que te hayan causado. Por ello, la aseguradora del responsable del siniestro debe indemnizarte con el importe íntegro de lo que cueste la reparación.

Sin embargo, si el vehículo no pudiera ser reparado debido a la importancia de los daños causados o porque el coste de la reparación fuera manifiestamente exagerado o desproporcionado, tienes derecho a recibir el importe de los que costaría comprar en el mercado de ocasión otro vehículo de similares características al tuyo.

Si la culta es tuya, la indemnización la abona tu propia compañía aseguradora en función de lo que tengas contratado en tu seguro en el apartado «Daños propios», por lo que es necesario examinar la póliza para conocer si tienes puesta alguna «cláusula limitativa» de tus derechos y si estas cláusulas las has aceptado expresamente con tu firma.

Otras formas de indemnizar

Además de indemnizar con el importe del «valor de la reparación», hay otras formas establecidas en las pólizas de seguros:

-        «Valor venal»: es el valor en venta del vehículo inmediatamente antes de producirse el siniestro.
-        «Valor venal mejorado»: es el valor venal más un porcentaje de aumento, que suele ser entre un 15 por ciento y un 30 por ciento.
-        «Valor de reposición»: es el importe necesario para comprar en el mercado de ocasión un vehículo de las mismas características al siniestro.

Además, hay aseguradoras que si se produce el siniestro en el primer o segundo año de vida del vehículo, indemnizan con el «valor de nuevo», es decir, el precio actualizado de tu coche nuevo en la fecha del siniestro, incluyendo todos los impuestos. O con el «valor de adquisición», que es el importe pagado cuando compraste el vehículo nuevo. Según tengas contratada la póliza puedes recibir una indemnización u otra y las diferencias pueden alcanzar hasta el 50 por ciento. Por eso, es importante que cada año conozcas en cuánto valora tu compañía tu coche en caso de siniestro total.

 http://www.autopista.es/trucos-y-consejos/todos-los-trucos-y-consejos/articulo/consejos-ante-un-siniestro-de-tu-coche-100762

Las 12 mejores webs y canales de Youtube para los que quieren arreglar sus propios gadgets

La realidad es que la web de la información, la web 2.0 supuso una auténtica revolución en muchos sentidos. El mundo de Internet dejo de adolecer de una crónica bipolaridad donde solo había dos grupos de gente, los que generaban contenidos y los que los consumían. La web 2.0 cambió las reglas del juego, la autopista de la información y las redes sociales es un sitio donde todo el mundo puede aportar su granito de arena.
Por eso es algo muy habitual el encontrar soluciones para casi cualquier tipo de cuestión. ¿Quieres aprender inglés? ¿Quieres aprender a cocinar? ¿Quieres aprender a tocar un instrumento? Para todo hay solución en Internet (o casi) y hoy vamos a ver las mejores opciones si eres un poco manitas y quieres reparar tu mismo tus aparatos electrónicos.
198426147-2-hospital-de-ipods-spectrum-gadgets-reparacion-de-aparatos-electricos-y-electronicos
Como siempre que nos ponemos a buscar por Internet, las opciones donde elegir son infinitas, así que vamos a intentar arrojaros un poco de luz en todo esto. Vamos a empezar por Youtube, dicen que una imágen vale más que mil palabras y muchas veces, tener un vídeo que nos explica paso a paso el proceso resulta de mucha ayuda.

Siete canales imprescindibles en Youtube si quieres reparar tus gadgets

  • Watch Repair Channel: Este canal lo pongo en primer lugar por su peculiaridad. Un canal dedicado en exclusiva a la reparación de relojes de todo tipo, desde digitales hasta antiguos relojes de cuerda, si no son gadgets, pero ahora que llega el iWatch y Android wear, tal vez… [Enlace]
  • Grants Pass TV Repair: Otro canal enfocado a un espectro muy concreto, el televisor. En este canal nos dan consejos de electrónica básica orientada a televisores para comprender su funcionamiento y tal vez atrevernos a repararlo.[Enlace]
  • Repairs Universe: Aquí ya nos encontramos en un ámbito algo más general. Nos enseñarán a reparar teléfonos y otros tipos de dispositivos electrónicos que podamos tener estropeados en casa. No se casan con nadie y destripan dispositivos de casi cualquier marca. [Enlace]
Reparar-o-comprar-un-producto-nuevo
  • How 2 Repair: En casa tenemos más aparatos aparte de teléfonos móviles o reproductores de MP3. En How 2 Repair podremos aprender como reparar frigoríficos, hornos, microondas… Si crees que puedes, aquí seguro que aprendes. [Enlace]
  • Go Cell Phone Repair: ¿Tienes en tu poder uno de los últimos smartphones del mercado o un tablet? Si algo te ha dejado de funcionar como debiera o tras un percance contra el suelo tenemos su pantalla hecha añicos en este canal podremos ver como repararlo. [Enlace]
  • Laptop Notebook Repair: Si alguna vez te has aventurado a desmontar un portátil, seguro que te has encontrado con que no sabías donde estaba el tornillo que sujeta esa parte interna. Busca tu modelo en concreto y seguro que tendrás todos los pasos para poder acceder a las “entrañas” de tu portátil estropeado. [Enlace]
  • Gadgets Repair: Una empresa dedicada a la reparación de todo tipo de aparatos electrónicos nos muestra todos los pasos a seguir durante sus reparaciones. [Enlace]

cell phone

¿Necesitas documentación detallada? Vamos a ver algunas páginas web dedicadas a ello

Si existe una bíblia (permitidme el símil) sobre la reparación de dispositivos electrónicos, uno de sus principales capítulos lo escribe iFixit. Si quieres un manual sobre como desmontar tu teléfono, tablet, ordenador portátil, sobremesa… Lo que sea básicamente, está ahí, hecho por ellos paso a paso. ¿Que necesitas herramienta o partes de remplazo? También te lo ofrecen en su página, tienen una serie de soluciones ingeniosas si vas a reparar habitualmente este tipo de dispositivos.
Desde Powerbook Medic nos traen guias de reparación pertenecientes a dispositivos de Apple. Desde portátiles, iMac, iPhone, iPad, iPod… Si tenemos uno de los dispositivos de la marca de la manzana mordida podremos buscar el modelo en concreto para ver un vídeo de su desmontaje. También nos ofrecerán recambios de piezas que tengamos estropeadas.
iFixit
Los ingleses de FormyMobile tienen un extenso listado de manuales de reparación de casi cualquier modelo de teléfono móvil.  Sus tutoriales están  documentados con fotografías de cada paso a dar a la hora de desmontar el terminal. Si queremos aprender el funcionamiento del sistema operativo que corre en nuestro ordenador y buscar soluciones a problemas que no se deben a fallos de partes físicas del ordenador. En Fixing my computer veremos una serie de explicaciones a todos los procesos a la hora de funcionar un ordenador.
En este blog de reparación podremos acceder a un curso online (previo pago) pero también tendremos algunos artículos interesantes sobre como configurar aspectos de nuestro sistema operativo o navegador.  Aún con todos estos consejos que os hemos dado hoy, en Anexo M tenemos uno más. Siempre tener claro lo que estamos haciendo y si no nos vemos capaces de repararlo, nunca intentarlo porque podría ser peor el remedio que la enfermedad.

 http://www.anexom.es/servicios-en-la-red/herramientas/las-13-mejores-webs-y-canales-de-youtube-para-los-que-quieren-arreglar-sus-propios-gadgets/?utm_source=facebook.com&utm_medium=social&utm_campaign=GEB

VIVIR SIN LUZ

Cuando llegué a la casa de Arnau y Marcel en el barrio de El Clot de Barcelona noté algo especial. Una extraña tranquilidad, mucho silencio, de repente parecía que ya no estaba en la ciudad, no había rastro de ruidos ni de estrés. Aquel piso era diferente, sobre la vitrocerámica de la cocina había un camping gas, no había nevera ni lavadora. Tampoco había tele, solo una radio grande y que además ahora estaba apagada.  Aquel piso era distinto porque no tenía electricidad.
VICE: ¿Por qué no tenéis electricidad?
Marcel: Una mañana llegaron unos operarios de la compañía eléctrica y nos dijeron que llevábamos un año sin pagar luz y que nos la iban a cortar. Nosotros éramos nuevos en el piso y no teníamos ni idea de que existía esa deuda. Fue un momento duro, nos quedamos un poco tirados e intentamos por todos los medios conseguir que nos la volvieran a conectar. Teníamos todo eléctrico.
¿Y qué hicisteis después?
Marcel: Estuvimos dos semanas llamando cada día a la empresa para quejarnos, ofreciéndonos a pagar lo que fuera. Queríamos volver a tener luz. Pero al cabo de dos semanas más o menos, cuando vimos que la cosa se iba a alargar, empezamos a pensar en soluciones para vivir mejor. Fuimos probando cosas, experimentando. Comenzamos a hablar con gente sobre qué alternativas teníamos y nos fuimos dando cuenta de todo lo que podíamos hacer por nosotros mismos… ¡Y nos gustó hacerlo! No teníamos ni idea de nada y fuimos aprendiendo sobre la marcha para vivir un poco mejor, preguntamos mucho a nuestros abuelos. Nos dimos cuenta de que en realidad queríamos vivir sin electricidad. Y así seguimos desde hace ya seis meses.
¿Qué tipo de cosas comenzasteis a cambiar?
Arnau: Nos encontramos varios problemas y los fuimos solucionando.
Lo primero fue la comida. No podíamos conservar alimentos durante mucho tiempo y tuvimos que cambiar de dieta. Ahora casi no comemos carne ya que no la podemos conservar. Compramos lo que nos vamos a comer ese mismo día. Y muchas veces conseguimos gratis piezas de fruta y verdura en el mercado que no se pueden vender porque tienen pequeñas taras.
Luego fue la luz. Primero utilizamos velas, pero nos salía demasiado caro y nos vimos obligados a buscar un sistema más ambicioso, con lo que empezamos a investigar sobre la posibilidad de generar electricidad en casa, descartando una placa solar porque son muy caras. Fue entonces cuando construimos la bicicleta.
¿Pero vosotros sabéis de electricidad?
Arnau: ¡Entonces no teníamos ni idea! Viendo vídeos en YouTube y preguntando a mecánicos del barrio construimos una bicicleta para cargar el móvil, los ordenadores y tener algún punto de luz. Con la bici pasas de la energía mecánica a energía eléctrica mediante un alternador. Luego almacenamos esta electricidad en una batería de coche a 12 voltios.
Marcel: Calculamos que más o menos, con media hora pedaleando tienes cargada la batería. Después necesitamos transformar esa energía de 12 voltios a los 220 que necesitamos para luces, cargar aparatos, etc., para eso tenemos un transformador.
¿Tenéis algún tipo de turno para pedalear?
Arnau: No, simplemente pedalea el que tiene ganas. Y si algún día no hay batería, pues no hay. Siempre podemos ir a la biblioteca a enchufar el ordenador. De esta forma aprendes a adaptarte a que no siempre hay electricidad, has de gestionar el consumo, pensar en cuando rato tienes la luz encendida, etc.
También os podéis duchar con agua caliente, ¿verdad?
Marcel: Sí, estuvimos probando varias cosas pero no nos funcionaron muy bien. Finalmente dimos con un sistema que consiste en llenar con agua calentada en la cocina un depósito que está conectado con la ducha. Luego, con un pedal de hinchar balsas, inyectamos presión. Gracias a esta presión conseguimos que el agua salga por la ducha, con lo que puedes darte una ducha corta.
Cuando he llegado estabais derritiendo restos de velas.
Arnau: Las velas son carísimas, con lo que reutilizamos los restos de velas que ya no pueden encenderse para hacer velas nuevas.
Tenemos un hornillo que hemos hecho con una lata de cerveza siguiendo unos vídeos de YouTube y que utiliza alcohol de quemar. En una taza derretimos los restos de cera que tenemos y hacemos velas nuevas utilizando mechas que compramos aparte y que trenzamos para que duren más.
¿Cómo laváis la ropa?
Arnau: Vamos a una lavandería del barrio, donde al final hemos conocido a mucha gente que de otra forma nunca hubiéramos conocido.
Al final, viéndoos cómo estáis ahora, ¿diríais que la experiencia de quedarse sin electricidad ha sido positiva?
Arnau: Nosotros ante un accidente, hemos decidido no reaccionar mal. Nos podríamos haber jodido, pero le hemos dado la vuelta y hemos comenzado a autogestionar nuestra vida por nuestra cuenta, fuera de la sociedad.
Si no te cortan nunca la luz, nunca te das cuenta de lo que es vivir sin electricidad. Es como un despertar de la conciencia, nos dimos cuenta que al autogestionarnos nuestra vida era mucho más gratificante. Es como dar más importancia a la experiencia. Aunque tengas pocas cosas, si las compartes con la gente las disfrutas mucho más. A raíz de quedarnos sin luz hemos tenido una especie de revelación. Puedes montarte tu vida de otra forma y valorando mucho más las cosas.
Marcel: Y luego te das cuenta de que además se genera una mayor unión con la gente del piso. Antes, cuando teníamos electricidad, cada uno se iba a su habitación con su ordenador, con sus movidas… Ahora cuando llegamos a casa nos encontramos a gente hablando en el sofá. Hay un cambio, ahora somos más una comunidad y nos hemos dado cuenta de que no está nada mal.

The Moneyless Man: un año viviendo fuera del sistema económico

Imagínate que un tipo decide pasarse un año al margen de la economía. Si, si, salirse del sistema económico establecido. Seria posible? Para probarlo decidió vivir un año entero gastando 0$ (por si no se entiende así lo escribo con letras: cero dolares, cero euros, o cero cualquier moneda que os podais imaginar).
En 2008 Mark Boyle decidió intentar vivir un año entero sin ningún dinero, o lo que es lo mismo: sin ningún ingreso y sin gastar nada. Su reglas autoimpuestas para este reto fueron las siguientes. Cerraría su cuenta bancaria, no gastaría ni recibiría ningún dinero, ni cheques ni tarjeta de crédito. debía vivir al margen, que significa: debería de producir su propia energía para iluminación, calefacción,cocina, y comunicaciones con el mundo exterior. Vendió su casa-barco y uso los varios miles que recibió para preparar su reto. Entre los preparativos, compro un panel solar de 300$ para cargar su portátil y su móvil (aceptaba recibir llamadas en gracias a un plan de llamadas sin contrato).
Consiguió una caravana gratis de una señora que se quería deshacer de ella. Llego a un acuerdo con un granjero para que le dejase aparcar la caravana en el solar a cambio de unas horas de trabajo al día. Se contruyó una letrina para obtener abono para sus plantaciones. Contruyó una ducha solar, consistente en una bolsa de plástico negra con un grifo para bañarse Para calentar el trailer compro una estufa de leña reciclada de un tanque de propano, y para cocinar se contruyó una barbacoa casera, diseñada para producir mucho calor con piezas de leña pequeñas. Como medio de transporte una bicicleta.
Comenzó ese mismo 2008 su año sin pasta en el día que el llamo de “no compres nada” (que es el día siguiente a Acción de Gracias en USA, el día que mas se compra allí de todo el año). Y por supuesto escribió un libro con el que seguro que ahora se esta forrando.
Pura convicción. Lo único que Mark Boyle necesitó para sobrevivir fue hacer una pequeña inversión al comienzo de su experimento: comprar unas celdas solares, las cuales instaló sobre un viejo camper de sus padres en el que ha vivido a las afueras de Bristol.
Lo demás ha sido pura convicción. En entrevista, Boyle confesó que lo peor al comienzo era que todo lo que quería hacer le llevaba mucho más tiempo. Hacer un cambio de vida tan radical es complicado, pero él no se arrepiente.
“Mi familia ha sido quien más me ha apoyado. Creo que se decepcionarían si volviera a usar dinero”.
A la pregunta de si planea seguir sin una libra en el bolsillo para siempre, Boyle responde con firmeza: “Sí, es un plan a largo plazo”.
Esta convicción personal lo ha llevado a escribir el libro The Moneyless Man sobre su experiencia, el cual fue editado en Inglaterra en junio pasado.
Con las ganancias del libro, Boyle piensa fundar la primera comunidad totalmente gratuita del mundo.
“Las ganancias van muy bien, el siguiente paso es comenzar a buscar un lugar para establecer la comunidad. El ideal es que sea cercano a Bristol”.
Es la idea de la freeconomía. Un ideal utópico en el que todo es compartido y en el que el dinero nunca es usado. Una utopía que por lo menos para él mismo, ha logrado hacer realidad.
FREECONOMÍA: La utopía de vivir sin dinero. Una freeconomía, como la define Mark Boyle, es una sociedad en la que las transacciones monetarias no son necesarias.
Basados en tres principios, la sociedad se hace autosostenible y puede solucionar sus necesidades básicas sin tener mayores problemas.
Una utopía que Boyle piensa convertir en realidad en la campiña inglesa.
Toolshare. Cualquier persona que entre en la sociedad deberá aportar aquellas herramientas que haya adquirido previamente, para que éstas sean compartidas.
Skillshare. Para sobrevivir, los miembros de la comunidad tienen que estar en un constante aprendizaje de habilidades. Éstas serán compartidas entre los miembros del grupo. Si alguien sabe cultivar la tierra, será su tarea hacer que ese conocimiento se vuelva común entre todos.
Landshare. La premisa es aprovechar el territorio disponible para darle a los habitantes de la comunidad un mejor nivel de vida. Ningún espacio se desaprovecha en la freeconomía.
http://diarioecologia.com/the-moneyless-man-un-ano-viviendo-fuera-del-sistema-economico/

miércoles, 28 de mayo de 2014

Teoría de la Programación Orientada a Objetos

Conceptos relacionados con la Programación Orientada a Objetos (Siglas POO o OOP en inglés) que nos sirvan para entender este paradigma de la programación. Estos artículos tratan la orientación a objetos desde un punto teórico, sin querer entrar en ningún lenguaje de programación particular, de ese modo todos los conocimientos explicados en este manual te servirán para aplicarlos a la práctica de la POO en cualquier lenguaje que puedas llegar a usar.

Qué es la programacion orientada a objetos

Introducimos para los más profanos las bases sobre las que se asienta la Programación Orientada a Objetos.
La programación Orientada a objetos (POO) es una forma especial de programar, más cercana a como expresaríamos las cosas en la vida real que otros tipos de programación.
Con la POO tenemos que aprender a pensar las cosas de una manera distinta, para escribir nuestros programas en términos de objetos, propiedades, métodos y otras cosas que veremos rápidamente para aclarar conceptos y dar una pequeña base que permita soltarnos un poco con este tipo de programación.

Motivación

Durante años, los programadores se han dedicado a construir aplicaciones muy parecidas que resolvían una y otra vez los mismos problemas. Para conseguir que los esfuerzos de los programadores puedan ser utilizados por otras personas se creó la POO. Que es una serie de normas de realizar las cosas de manera que otras personas puedan utilizarlas y adelantar su trabajo, de manera que consigamos que el código se pueda reutilizar.
La POO no es difícil, pero es una manera especial de pensar, a veces subjetiva de quien la programa, de manera que la forma de hacer las cosas puede ser diferente según el programador. Aunque podamos hacer los programas de formas distintas, no todas ellas son correctas, lo difícil no es programar orientado a objetos sino programar bien. Programar bien es importante porque así nos podemos aprovechar de todas las ventajas de la POO.

Cómo se piensa en objetos

Pensar en términos de objetos es muy parecido a cómo lo haríamos en la vida real. Por ejemplo vamos a pensar en un coche para tratar de modelizarlo en un esquema de POO. Diríamos que el coche es el elemento principal que tiene una serie de características, como podrían ser el color, el modelo o la marca. Además tiene una serie de funcionalidades asociadas, como pueden ser ponerse en marcha, parar o aparcar.
Pues en un esquema POO el coche sería el objeto, las propiedades serían las características como el color o el modelo y los métodos serían las funcionalidades asociadas como ponerse en marcha o parar.
Por poner otro ejemplo vamos a ver cómo modelizaríamos en un esquema POO una fracción, es decir, esa estructura matemática que tiene un numerador y un denominador que divide al numerador, por ejemplo 3/2.
La fracción será el objeto y tendrá dos propiedades, el numerador y el denominador. Luego podría tener varios métodos como simplificarse, sumarse con otra fracción o número, restarse con otra fracción, etc.
Estos objetos se podrán utilizar en los programas, por ejemplo en un programa de matemáticas harás uso de objetos fracción y en un programa que gestione un taller de coches utilizarás objetos coche. Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos también son objetos. Es decir, el taller de coches será un objeto que utilizará objetos coche, herramienta, mecánico, recambios, etc.

Clases en POO

Las clases son declaraciones de objetos, también se podrían definir como abstracciones de objetos. Esto quiere decir que la definición de un objeto es la clase. Cuando programamos un objeto y definimos sus características y funcionalidades en realidad lo que estamos haciendo es programar una clase. En los ejemplos anteriores en realidad hablábamos de las clases coche o fracción porque sólo estuvimos definiendo, aunque por encima, sus formas.
Propiedades en clases 
Las propiedades o atributos son las características de los objetos. Cuando definimos una propiedad normalmente especificamos su nombre y su tipo. Nos podemos hacer a la idea de que las propiedades son algo así como variables donde almacenamos datos relacionados con los objetos.
Métodos en las clases 
Son las funcionalidades asociadas a los objetos. Cuando estamos programando las clases las llamamos métodos. Los métodos son como funciones que están asociadas a un objeto.

Objetos en POO

Los objetos son ejemplares de una clase cualquiera. Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se creará. Esta acción de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traducción de la palabra instace que en inglés significa ejemplar). Por ejemplo, un objeto de la clase fracción es por ejemplo 3/5. El concepto o definición de fracción sería la clase, pero cuando ya estamos hablando de una fracción en concreto 4/7, 8/1000 o cualquier otra, la llamamos objeto.
Para crear un objeto se tiene que escribir una instrucción especial que puede ser distinta dependiendo el lenguaje de programación que se emplee, pero será algo parecido a esto.
miCoche = new Coche()
Con la palabra new especificamos que se tiene que crear una instancia de la clase que sigue a continuación. Dentro de los paréntesis podríamos colocar parámetros con los que inicializar el objeto de la clase coche.
Estados en objetos 
Cuando tenemos un objeto sus propiedades toman valores. Por ejemplo, cuando tenemos un coche la propiedad color tomará un valor en concreto, como por ejemplo rojo o gris metalizado. El valor concreto de una propiedad de un objeto se llama estado.
Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto.
miCoche.color = rojo
El objeto es miCoche, luego colocamos el operador punto y por último el nombre e la propiedad a la que deseamos acceder. En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a rojo con una simple asignación.
Mensajes en objetos 
Un mensaje en un objeto es la acción de efectuar una llamada a un método. Por ejemplo, cuando le decimos a un objeto coche que se ponga en marcha estamos pasándole el mensaje “ponte en marcha”.
Para mandar mensajes a los objetos utilizamos el operador punto, seguido del método que deseamos invocar.
miCoche.ponerseEnMarcha()
En este ejemplo pasamos el mensaje ponerseEnMarcha(). Hay que colocar paréntesis igual que cualquier llamada a una función, dentro irían los parámetros.

Otras cosas

Hay mucho todavía que conocer de la POO ya que sólo hemos hecho referencia a las cosas más básicas. También existen mecanismos como la herencia y el polimorfismo que son unas de las posibilidades más potentes de la POO.
La herencia sirve para crear objetos que incorporen propiedades y métodos de otros objetos. Así podremos construir unos objetos a partir de otros sin tener que reescribirlo todo. Puedes encontrar en DesarrolloWeb.com un artículo completo dedicado a la Herencia.
El polimorfismo sirve para que no tengamos que preocuparnos sobre lo que estamos trabajando, y abstraernos para definir un código que sea compatible con objetos de varios tipos. Puedes acceder a otro artículo para saber más sobre Polimorfismo.
Son conceptos avanzados que cuesta explicar en las líneas de ese informe. No hay que olvidar que existen libros enteros dedicados a la POO y aquí solo pretendemos dar un repaso a algunas cosas para que os suenen cuando tengáis que poneros delante de ellas en los lenguajes de programación que debe conocer un desarrollador del web. Sin embargo, si quieres saber más también puedes continuar leyendo en DesarrolloWeb.com, en el manual de la teoría de la Programación orientada a objetos.

Ejemplo concreto de programación orientada a objetos

Para conseguir un ejemplo concreto de lo que es la programación orientada a objetos, podemos entrar en el Manual de PHP 5. Realmente este manual explica las características de orientación a objetos de PHP 5 y ofrece ejemplos concretos de creación de clases con características como herencia, polimorfismo, etc.

Herencia en Programación Orientada a Objetos

Concepto de herencia en la programación orientada a objetos: un mecanismo básico por el que las clases hijas heredan el código de las clases padre.

Qué es Programación Orientada a Objetos publicado en DesarrolloWeb.com ya hace más de doce años. Aunque ya tiene su tiempo, según lo releo puedo decir que sigue perfecto, aunque le faltan algunas partes fundamentales que hacen de la programación orientada a objetos (POO) un paradigma extremadamente útil y potente.
Si ya entendiste lo que son clases y objetos, atributos y estados, métodos y mensajes, ahora puedes ampliar la información en el presente texto para conocer acerca de la herencia. Pero antes de ello, centrémonos en entender algunas de las prácticas más útiles y deseables de la programación en general.

Jerarquización

Es un proceso por el cual se crean organizaciones de elementos en distintos niveles. No es un concepto específicamente de POO, sino que es algo que vemos en la vida real en muchos ámbitos, algo inherente a cualquier tipo de sistema. Puedo tener diversos tipos de jerarquías, como clasificación o composición.
Composición: Es cuando unos elementos podemos decir que están compuestos de otros, o que unos elementos están presentes en otros. Por ejemplo, el sistema respiratorio y los pulmones, la nariz, etc. Podemos decir que los pulmones están dentro del sistema respiratorio, así como dentro de los pulmones encontramos bronquios y alvéolos. En esta jerarquía de elementos tenemos composición porque donde unos forman parte de otros. En una factura también podemos decir que puede haber una jerarquía de composición. La factura tiene un cliente, varios conceptos facturables, un impuesto, etc.
Clasificación: Este tipo de jerarquización indica que unos elementos son una especialización de otros. Por ejemplo, los animales, donde tenemos vertebrados e invertebrados. Luego, dentro de los vertebrados encontramos aves, reptiles, mamíferos, etc. En los mamíferos encontramos perros, vacas, conejos... Éste es el tipo de jerarquización en que quiero que te fijes.
Los lenguajes de programación orientados a objetos son capaces de crear jerarquizaciones basadas en composición con lo que ya sabemos de clases y objetos. Eso es porque podemos tener como propiedades de objetos, otros objetos. Por ejemplo, en el caso de la factura, podríamos tener como propiedades el cliente, el impuesto, la lista de conceptos facturables, etc. Sin embargo, para hacer jerarquías de clasificación nos hace falta conocer la herencia.

Reutilización del código

Por otra parte, otro de los mecanismos que cualquier lenguaje de programación debe proveer es la posibilidad de reutilizar el código. En la programación estructurada tenemos las funciones, así que ya hemos podido reutilizar código de alguna manera. Así pues, el equivalente a las funciones, los métodos, ya nos da un grado de reutilización, pero no llegan al nivel de potencia de las que encontraremos en la herencia.
No necesitamos decirte mucho más para entender las bondades de la reutilización: en inglés lo resume el término "DRY", Don't Repeat Yourself (no te repitas) y es uno de los enunciados que debes tener más presente cuando programas. "No es mejor programador quien más líneas de código hace, sino quien mejor las reutiliza".
Quizás está de más decirlo, porque seguro que ya sabes que debemos evitar escribir dos veces el mismo código, evitar los copia/pega y pensar que la reutilización nos ayuda seriamente en el mantenimiento del software. Enseguida verás cómo la herencia es un mecanismo fundamental para reutilizar código.

Herencia el la POO

Ahora que ya conoces dos beneficios que nos proporciona la herencia y por qué es algo tan deseable en la programación, creo que te sentirás motivado para profundizar en las bases de este mecanismo, herencia, clave de la Orientación a Objetos.
La herencia es la transmisión del código entre unas clases y otras. Para soportar un mecanismo de herencia tenemos dos clases: la clase padre y la/s clase/s hija/s. La clase padre es la que transmite su código a las clases hijas. En muchos lenguajes de programación se declara la herencia con la palabra "extends".
class Hija extends Padre{ }
Eso quiere decir que todo el código de la clase padre se transmite, tal cual, a la clase hija. Si lo quieres ver así, es como si tuvieras escrito, línea a línea, todo el código de la class "Padre" dentrode las llaves de la class "Hija". Por eso, la herencia es fundamental para reutilizar código, porque no necesitas volver a incorporar el código de Padre en Hija, sino que realmente al hacer el "extends" es como si ya estuviera ahí.

Ejemplo de herencia

Volvamos a los animales, pensemos en los mamíferos. Todos tienen una serie de características, como meses de gestación en la barriga de la madre, pechos en las hembras para amamantar y luego funcionalidades como dar a luz, mamar, etc. Eso quiere decir que cuando realices la clase perro vas a tener que implementar esos atributos y métodos, igual que la clase vaca, cerdo, humano, etc.
¿Te parecería bien reescribir todo ese código común en todos los tipos de mamíferos, o prefieres heredarlo? en este esquema tendríamos una clase mamífero que nos define atributos como numero_mamas, meses_gestacion y métodos como dar_a_luz(), mamar(). Luego tendrías la clase perro que extiende (hereda) el código del mamífero, así como las vacas, que también heredan de mamífero y cualquiera de los otros animales de esta clasificación.
Otro ejemplo, tenemos alumnos universitarios. Algunos son alumnos normales, otros Erasmus y otros becarios. Probablemente tendremos una clase Alumno con una serie de métodos como asistir_a_clase(), hacer_examen() etc., que son comunes a todos los alumnos, pero hay operaciones que son diferentes en cada tipo de alumno como pagar_mensualidad() (los becarios no pagan) o matricularse() (los Erasmus que son estudiantes de intercambio, se matriculan en su universidad de origen).
Lo que debes observar es que con la herencia siempre consigues clases hijas que son una especialización de la clase padre. Para saber si está correcto emplear herencia entre unas clases y otras, plantéate la pregunta ¿CLASE HIJA es un CLASE PADRE? (por ejemplo, ¿un perro es un mamífero? ¿Un becario es un alumno de universidad?)
Nota: Existen otros modos de decir clases hija, como clase heredada, clase derivada, etc.

Otras cosas que tienes que saber sobre herencia

En este artículo nos hemos limitado a hablar sobre el concepto de herencia, pero no sobre una serie de mecanismos asociados que resultan clave para entender todavía mejor las posibilidades de esta capacidad de la POO. Nos referimos a la visibilidad de propiedades y métodos entre clases padre e hija, la posibilidad de hacer clases abstractas, que son las que contienen métodos abstractos o incluso propiedades abstractas. Hemos dejado de lado asuntos como la herencia múltiple, que te proporciona la posibilidad de heredar de varias clases a la vez (los ejemplos mencionados son de herencia simple).
Todo eso es algo que tendrás que aprender en otros textos, futuros artículos o en la referencia de tu propio lenguaje de programación. Nosotros esperamos que el presente texto te haya aclarado el concepto de una forma amena, que es lo más fundamental para que a partir de aquí tengas la base suficiente para profundizar en las características de tu propio lenguaje de programación con orientación a objetos.

Polimorfismo en Programación Orientada a Objetos

Qué es el polimorfismo en la Programación Orientada a Objetos, el motivo de su existencia y cómo implementar polimorfismo en clases y objetos. 

 
El concepto de polimorfismo es en realidad algo muy básico. Realmente, cuando estamos aprendiendo Programación Orientada a Objetos (también conocida por sus siglas POO / OOP) muchos estudiantes nos hacemos un embolado tremendo al tratar de entender el concepto, pero en su base es algo extremadamente sencillo.

Trataremos de explicarlo en este artículo con palabras sencillas, pero para los valientes, aquí va una primera definición que no es mía y que carece de la prometida sencillez. Pero no te preocupes, pues la entiendas o no, luego lo explicaré todo de manera más llana.



Definición: El polimorfismo es una relajación del sistema de tipos, de tal manera que una referencia a una clase (atributo, parámetro o declaración local o elemento de un vector) acepta direcciones de objetos de dicha clase y de sus clases derivadas (hijas, nietas, …).

Nota: Esta es la definición académica que nos ofrece el profesor de la UPM Luis Fernández, del que fui alumno en la universidad y en EscuelaIT.
Herencia y las clasificaciones en Programación Orientada a Objetos
Para poder entender este concepto de OOP necesitas entender otras cosas previas, como es el caso de la herencia. Esto lo hemos explicado en un artículo anterior en DesarrolloWeb.com: Herencia en la Programación Orientada a Objetos.

Veremos que el polimorfismo y la herencia son dos conceptos estrechamente ligados. Conseguimos implementar polimorfismo en jerarquías de clasificación que se dan a través de la herencia. Por ejemplo, tenemos una clase vehículo y de ella dependen varias clases hijas como coche, moto, autobús, etc.

Pero antes de entender todo esto, queremos ir un poco más hacia atrás, entendiendo lo que es un sistema de tipos.

Por qué el sistema de tipos es importante en Polimorfismo
Muchos de los lectores que asumo estudiarán este concepto a través de este artículo han aprendido a programar en lenguajes débilmente tipados, como es el caso de PHP y Javascript. Por ello es conveniente entender cómo es un lenguaje fuertemente tipado, como es el caso de Java o C.

En estos lenguajes, cuando defino una variable, siempre tengo que decir el tipo de datos que va a contener esta variable. Por ejemplo:

int miNumero;
Así le indicamos que la variable declarada "miNumero" va a contener siempre un entero. Podrás asignarle diversos valores, pero siempre deben de ser números enteros. De lo contrario el compilador te mostrará un mensaje de error.

Esto incluso pasa con los objetos. Por ejemplo, si en Java defino la clase "Largometraje" (una cinta que se puede exhibir en la televisión o el cine), cuando creo objetos de la clase "Largometraje" debo declarar variables en las que indique el tipo de objeto que va a contener.

Largometraje miLargo = new Largometraje("Lo que el viento se llevó");
Esa variable "miLargo", por declaración tendrá una referencia a un objeto de la clase "Largometraje". Pues bien, durante toda su vida, deberá tener siempre una referencia a cualquier objeto de la misma clase. O sea, mañana no podremos guardar un entero en la variable, ni una cadena u otro objeto de otra clase.

Entendida esa premisa, pensemos en el concepto de función y su uso en lenguajes de tipado estático.

Nota: A veces, a los lenguajes fuertemente tipados se les llama de "tipado estático" y a los débilmente tipados se les llama "tipado dinámico". Si quieres saber más sobre lenguajes tipados y no tipados, te recomiendo ver el #programadorIO tipados Vs no tipados.
Cuando en un lenguaje fuertemente tipado declaramos una función, siempre tenemos que informar el tipo de los parámetros que va a recibir. Por ejemplo, la función "sumaDosNumeros()" recibirá dos parámetros, que podrán ser de tipo entero.

function sumaDosNumeros(int num1, int num2)
A esta función, tal como está declarada, no le podremos pasar como parámetros otra cosa que no sean variables o literales con valores de número entero. En caso de pasar otros datos con otros tipos, el compilador te alertará.

Esto mismo de los parámetros en las funciones te ocurre también con los atributos de las clases, datos que insertas en un array, etc. Como ves, en estos lenguajes como Java el tipado se lleva a todas partes.

Polimorfismo en objetos
Ahora párate a pensar en clases y objetos. Volvamos a la clase "Largometraje" y ahora pensemos en la clase "Cine". En un cine se reproducen largometrajes. Puedes, no obstante, tener varios tipos de largometrajes, como películas o documentales, etc. Quizás las películas y documentales tienen diferentes características, distintos horarios de audiencia, distintos precios para los espectadores y por ello has decidido que tu clase "Largometraje" tenga clases hijas o derivadas como "Película" y "Documental".

Imagina que en tu clase "Cine" creas un método que se llama "reproducir()". Este método podrá recibir como parámetro aquello que quieres emitir en una sala de cine y podrán llegarte a veces objetos de la clase "Película" y otras veces objetos de la clase "Documental". Si has entendido el sistema de tipos, y sin entrar todavía en polimorfismo, debido a que los métodos declaran los tipos de los parámetros que recibes, tendrás que hacer algo como esto:

reproducir(Pelicula peliculaParaReproducir)
Pero si luego tienes que reproducir documentales, tendrás que declarar:

reproducir(Documental documentaParaReproducir)
Probablemente el código de ambos métodos sea exactamente el mismo. Poner la película en el proyector, darle al play, crear un registro con el número de entradas vendidas, parar la cinta cuando llega al final, etc. ¿Realmente es necesario hacer dos métodos? De acuerdo, ¿pero si mañana te mandan otro tipo de cinta a reproducir, como la grabación de la final del mundial de fútbol en 3D? ¿Tendrás que crear un nuevo método sobre la clase "Cine"? ¿es posible ahorrarnos todo ese mantenimiento?

Aquí es donde el polimorfismo nos ayuda. Podrías crear perfectamente un método "reproducir()" que recibe un largometraje y donde podrás recibir todo tipo de elementos, películas, documentales y cualquier otra cosa similar que sea creada en el futuro.

Entonces lo que te permiten hacer los lenguajes es declarar el método "reproducir()" indicando que el parámetro que vas a recibir es un objeto de la clase padre "Largometraje", pero donde realmente el lenguaje y compilador te aceptan cualquier objeto de la clase hija o derivada, "Película", "Documental", etc.

reproducir(Largometraje elementoParaReproducir)
Podremos crear películas y reproducirlas, también crear documentales para luego reproducir y lo bonito de la historia es que todos estos elementos son aceptados por el método "reproducir()", gracias a la relajación del sistema de tipos. Incluso, si mañana quieres reproducir otro tipo de cinta, no tendrás que tocar la clase "Cine" y el método "reproducir()". Siempre que aquello que quieras reproducir sea de la clase "Largometraje" o una clase hija, el método te lo aceptará.

En fin, esto es lo que significa polimorfismo. A partir de aquí puede haber otra serie de consideraciones y recomendaciones, así como características implementadas en otros lenguajes, pero explicar todo eso no es el objetivo de este artículo. Esperamos que con lo que has aprendido puedas orientar mejor tus estudios de Programación Orientada a Objetos. Si quieres más información sobre el tema lee el artículo Qué es Programación Orientada a Objetos, que seguro te será de gran utilidad.

Abstracción en Programación Orientada a Objetos

Concepto de abstracción en el paradigma de la Programación Orientada a Objetos y situaciones en las que se puede y se debe aplicar.
Abstracción es un término del mundo real que podemos aplicar tal cual lo entendemos en el mundo de la Programación Orientada a Objetos. Algo abstracto es algo que está en el universo de las ideas, los pensamientos, pero que no se puede concretar en algo material, que se pueda tocar.
Pues bien, una clase abstracta es aquella sobre la que no podemos crear especímenes concretos, en la jerga de POO es aquella sobre la que no podemos instanciar objetos. Ahora bien, ¿cuál es el motivo de la existencia de clases abstractas? o dicho de otra manera, ¿por qué voy a necesitar alguna vez declarar una clase como abstracta?, ¿en qué casos debemos aplicarlas? Esto es todo lo que pretendemos explicar en este artículo.

Abstracción en el mundo real

La programación orientada a objetos sabemos que, de alguna manera, trata de "modelizar" los elementos del mundo real. En el mundo en el que vivimos existe un universo de objetos que colaboran entre sí para realizar tareas de los sistemas. Llevado al entorno de la programación, también debemos programar una serie de clases a partir de las cuales se puedan instanciar objetos que colaboran entre sí para la resolución de problemas. Si asumimos esto, a la vista de las situaciones que ocurren en el mundo real, podremos entender la abstracción.
Cuando estudiamos en el concepto de Herencia en Programación Orientada a Objetos vimos que con ella se podían definir jerarquías de clasificación: los animales y dependiendo de éstos tenemos mamíferos, vertebrados, invertebrados. Dentro de los mamíferos tenemos vacas, perros…
Animal puede ser desde una hormiga a un delfín o un humano. En nuestro cerebro el concepto de animal es algo genérico que abarca a todos los animales: "seres vivos de un "reino" de la existencia". Si defines animal tienes que usar palabras muy genéricas, que abarquen a todos los animales posibles que puedan existir en el mundo. Por ello no puedes decir que animales son aquellos que nacen de huevos, o después de un periodo de gestación en la placenta.
Adonde quiero llegar es que el animal te implica una abstracción de ciertos aspectos. Si lo definimos con palabras no podemos llegar a mucho detalle, porque hay muchos animales distintos con características muy diferentes. Hay características que se quedan en el aire y no se pueden definir por completo cuando pensamos en el concepto de animal "genérico".
Para acabar ¿en el mundo real hay un "animal" como tal? No, ni tan siquiera hay un "mamífero". Lo que tenemos son especímenes de "perro" o "vaca", "hormiga", "cocodrilo", "gorrión" pero no "animal" en plan general. Es cierto que un perro es un animal, pero el concepto final, el ejemplar, es de perro y no animal.
Por tanto "animal", en términos del lenguaje común, podemos decir que es un concepto genérico, pero no una concreción. En términos de POO decimos que es un concepto abstracto, que implementaremos por medio de una clase abstracta. No instanciaremos animales como tal en el mundo, sino que instanciaremos especímenes de un tipo de animal concreto.
En los animales existen propiedades y métodos que pueden ser comunes a todos los animales en general. Los animales podrán tener un nombre o una edad, determinadas dimensiones o podrán desempeñar acciones como morir. Lo que nos debe quedar claro es que no deberíamos poder instanciar un animal como tal. ¿Cómo nace un animal en concreto?, ¿cómo se alimenta? Para responder a esas preguntas necesitamos tener especímenes más concretos. Sí que sé cómo nace o cómo se alimenta una hormiga, o un gorrión, pero no lo puedo saber de un animal genérico, porque puede hacerlo de muchas maneras distintas.
Seguiremos trabajando para explicar estos conceptos, pero de momento entendemos que "animal" es una clase abstracta, pero "hormiga", "perro" o "gorrión" no serían clases abstractas, que sí podríamos instanciar.

Herencia y abstracción

Si entendemos el concepto de herencia podremos entender mejor la abstracción y cómo se implementa.
Recuerda nuestro ejemplo: Tengo animales. Hemos acordado que no puedo tener un animal concreto instanciado en un sistema. Si acaso tendré instancias de perros, saltamontes o lagartijas. Pues bien, en los esquemas de herencia este caso nos puede surgir muy habitualmente.
En la clase "animal" puedo tener determinadas propiedades y acciones implementadas. Por ejemplo, todos los animales pueden tener un nombre, o una edad (ya sean segundos, días o años de edad). También es posible que pueda definir diversas acciones de una vez para todos los animales de una jerarquía de herencia, por ejemplo, la acción de morir, pues todos morimos igual (simplemente dejamos de existir aunque aquí dependiendo de las creencias de cada uno esto pueda ser discutible).
Aunque mi sistema no pueda crear animales como tal, tener definidas esas cuestiones comunes a todos los animales me resulta útil para no tener que programarlas de nuevo en todos los tipos de animales que puedan existir. Simplemente las heredaré en las clases hijas, de modo que estarán presentes sin tener que volver a programar todas esas cosas comunes.
Sin embargo hay cosas de los animales que no podré implementar todavía. Atributos como el número de patas, el alcance de la visión, se implementarán a futuro en los tipos de animales que las necesiten, pero fijémonos en las acciones o métodos. Por ejemplo nacer, alimentarse, etc. No sé cómo va a nacer un animal, pero sé que todos los animales del mundo nacen de algún modo (unos nacen de huevos, otros estaban en la barriga de las hembras y nacen a consecuencia de un parto, etc.)
En estos casos nos puede ser útil definir como métodos abstractos en la clase "animal" esos métodos que van a estar presentes en todos los animales, aunque no seamos capaces de implementarlos todavía.
public abstract function nacer();
Esto quiere decir que todos los animales del mundo heredarán un método abstracto llamado nacer. En las clases concretas que hereden de animal y donde ya sepamos cómo nace tal animal, por ejemplo, la gallina, podemos implementar ese método, para que deje de ser abstracto.
public function nacer(){
 //se rompe el huevo y nace el pollito que más adelante será una hermosa gallina
}
Hasta ahora sabemos que hay clases que tienen métodos abstractos, que no somos capaces de implementar todavía y clases en las que se heredan métodos abstractos y en las que seremos capaces de implementarlos.
La utilidad de esto la entenderemos mejor en unos instantes, al tratar el polimorfismo, pero de momento debemos ser capaces de asimilar estas definiciones más formales:
"Una clase abstracta es aquella en la que hay definidos métodos abstractos, sobre la que no podremos instanciar objetos" Además, en un esquema de herencia, "Si heredamos de una clase abstracta métodos abstractos, tampoco se podrán instanciar objetos de las clases hijas y tendrán que definirse como abstractas, a no ser que implementemos todos y cada uno de los métodos que se habían declarado como abstractos en la clase padre".

Polimorfismo y abstracción

Creo que si no se examina de cerca la abstracción bajo el prisma del polimorfismo no se puede entender bien la verdadera utilidad de hacer clases abstractas. Pero antes de seguir, recuerda qué es el Polimorfismo en Programación Orientada a Objetos.
Cuando hablamos de polimorfismo explicamos que es una relajación del sistema de tipos por la cual éramos capaces de aceptar objetos de un tipo y de todas las clases hijas. Por ejemplo, tengo la clase "PoligonoRegular". Sé que los polígonos regulares voy a querer conocer su área, pero para saber su área necesito conocer el número de lados que tiene. Entonces la clase "PoligonoRegular" tendrá un método abstracto "dameArea()". Luego, al definir la clase "cuadrado", o el "pentágono", etc. podremos implementar tal método, con lo que dejará de ser abstracto. Tenemos "Alumnos de una Universidad", los alumnos los vas a querer matricular en las universidades, pero dependiendo del tipo de alumno la matrícula se hace diferente, pues no es lo mismo matricular un alumno becario, o de familia numerosa, que uno normal. Entonces, en la clase "alumno" tendré un método abstracto que sea "matriculate()" que podré definir del todo cuando implemente las clases hijas.
Ahora piensa en esto. Gracias a que fueron definidos los métodos abstractos "dameArea()" y "matriculate()" en las clases padres, tengo clara una cosa: cuando trabajo con elementos de la clase "poligonoRegular", sé que a todos los polígonos regulares que pueda recibir les puedo pedir que me devuelvan su área. También sé que a todos los alumnos les puedo pedir que se matriculen en una universidad.
Ahí está la potencia del polimorfismo, recibir un objeto que pertenece a una jerarquía de clasificación y saber que puedo pedirle determinadas cosas. Quizás en la clase padre no pudieron implementarse esos comportamientos, porque no sabíamos el código necesario para ello, pero al menos se declararon que iban a poder realizarse en el futuro en clases hijas. Eso me permite, en un esquema de polimorfismo, que pueda estar seguro que todos los objetos que reciba puedan responder a acciones determinadas, pues en las clases hijas habrán sido definidas necesariamente (si no se definen deberían declararse las clases como abstractas y en ese caso es imposible que me manden objetos de esa clase).
Es cierto que el concepto se puede quedar un poco en "la abstracción" pero cuando practiques un poco te darás cuenta de la esencia de las clases abstractas y entenderás lo útil y necesario que es declarar métodos abstractos para poder implementar el polimorfismo. De momento es todo en cuanto a este concepto, esperamos que este texto te haya servido de algo. Por supuesto, se agradecen los comentarios.
http://www.desarrolloweb.com/manuales/teoria-programacion-orientada-objetos.html