LENGUAJE DE PROGRAMACIÓN Un lenguaje de programación es un idioma artificial diseñado para expresar procesos que pueden ser llevadas a cabo

por máquinas como las computadoras. Pueden usarse para crear programas que controlen el comportamiento físico y lógico de una máquina, para expresar algoritmos con precisión, o como modo de comunicación humana. Está formado por un conjunto de símbolos y reglas sintácticas y semánticas que definen su estructura y el significado de sus elementos y expresiones. Al proceso por el cual se escribe, se prueba, se depura, se compila y se mantiene el código fuente de un programa informático se le llama programación. También la palabra programación se define como el proceso de creación de un programa de computadora, mediante la aplicación de procedimientos lógicos, a través de los siguientes pasos:
    

El desarrollo lógico del programa para resolver un problema en particular. Escritura de la lógica del programa empleando un lenguaje de programación específico (codificación del programa). Ensamblaje o compilación del programa hasta convertirlo en lenguaje de máquina. Prueba y depuración del programa. Desarrollo de la documentación.

Existe un error común que trata por sinónimos los términos 'lenguaje de programación' y 'lenguaje informático'. Los lenguajes informáticos engloban a los lenguajes de programación y a otros más, como por ejemplo HTML (lenguaje para el marcado de páginas web que no es propiamente un lenguaje de programación, sino un conjunto de instrucciones que permiten diseñar el contenido de los documentos). Permite especificar de manera precisa sobre qué datos debe operar una computadora, cómo deben ser almacenados o transmitidos y qué acciones debe tomar bajo una variada gama de circunstancias. Todo esto, a través de un lenguaje que intenta estar relativamente próximo al lenguaje humano o natural. Una característica relevante de los lenguajes de programación es precisamente que más de un programador pueda usar un conjunto común de instrucciones que sean comprendidas entre ellos para realizar la construcción de un programa de forma colaborativa Programación orientada a objetos La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa los objetos en sus interacciones, para diseñar aplicaciones y programas informáticos. Está basado en varias técnicas, incluyendo herencia, cohesión, abstracción, polimorfismo, acoplamiento y encapsulamiento . Su uso se popularizó a principios de la década de los años 1990. En la actualidad, existe variedad de lenguajes de programación que soportan la orientación a objetos.

un lenguaje diseñado para hacer simulaciones. y en segundo lugar en las estructuras de datos que esos procedimientos manejan. Los programadores que emplean POO. en la que los datos y los procedimientos están separados y sin relación. que favorecen la comunicación entre ellos.Introducción Los objetos son entidades (método) e identidad:    que tienen un determinado estado. De esta manera se estaría realizando una programación estructurada camuflada en un lenguaje de programación orientado a objetos. del Centro de Cómputo Noruego en Oslo. Esta característica lleva a tratarlos como unidades indivisibles. Hacerlo podría producir el hábito erróneo de crear clases contenedoras de información por un lado y clases con métodos que manejen a las primeras por el otro. Los métodos (comportamiento) y atributos (estado) están estrechamente relacionados por la propiedad de conjunto. qué operaciones se pueden realizar con él. que fueron confundidas por la explosión combinatoria de cómo las diversas cualidades de diferentes naves podían afectar unas a las otras. primero definen objetos para luego enviarles mensajes solicitándoles que realicen sus métodos por sí mismos. es decir. ya que lo único que se busca es el procesamiento de unos datos de entrada para obtener otros de salida. El comportamiento está definido por los métodos o mensajes a los que sabe responder dicho objeto. serán uno o varios atributos a los que se habrán asignado unos valores concretos (datos). Esta propiedad destaca que una clase requiere de métodos para poder tratar los atributos con los que cuenta. Esta comunicación favorece a su vez el cambio de estado en los propios objetos. en las que no se separa el estado y el comportamiento. dicho con otras palabras. en cambio. sin separar ni darle mayor importancia a alguno de ellos. La POO difiere de la programación estructurada tradicional. En este centro se trabajaba en simulaciones de naves. El programador debe pensar indistintamente en ambos conceptos. La programación estructurada anima al programador a pensar sobre todo en términos de procedimientos o funciones. creado por Ole-Johan Dahl y Kristen Nygaard. En la programación estructurada solo se escriben funciones que procesan datos. Un objeto contiene toda la información que permite definirlo e identificarlo frente a otros objetos pertenecientes a otras clases e incluso frente a objetos de una misma clase. A su vez. Origen Los conceptos de la programación orientada a objetos tienen origen en Simula 67. los objetos disponen de mecanismos de interacción llamados métodos. La identidad es una propiedad de un objeto que lo diferencia del resto. La idea surgió al agrupar los . comportamiento El estado está compuesto de datos o informaciones. al poder tener valores bien diferenciados en sus atributos. es su identificador (concepto análogo al de identificador de una variable o una constante).

pero como no pertenecen a la clase. Fueron refinados más tarde en Smalltalk.diversos tipos de naves en diversas clases de objetos. puede usar los mismos métodos y variables publicas declaradas en C. como si esos atributos y operaciones hubiesen sido definidos por la misma D. para las cuales la programación orientada a objetos está particularmente bien adaptada. entre otros. herencia de la clase C a la clase D) es la facilidad mediante la cual la clase D hereda en ella cada uno de los atributos y operaciones de C. cumpliendo todas las características propias de la orientación a objetos. soporta una orientación completa a objetos. siendo responsable cada clase de objetos de definir sus propios datos y comportamientos. que superan y amplían conceptos antiguos ya conocidos. pero permitiendo algunas características imperativas de maneras "seguras". Introduce nuevos conceptos. En este caso. Para saltar este obstáculo. Lisp y Pascal. . Los lenguajes orientados a objetos "puros". La programación orientada a objetos se fue convirtiendo en el estilo de programación dominante a mediados de los años ochenta. pero ahora ha sido esencialmente reemplazado porJava. Las características de orientación a objetos fueron agregadas a muchos lenguajes existentes durante ese tiempo. desarrollado en Simula en Xerox PARC (cuya primera versión fue escrita sobre Basic) pero diseñado para ser un sistema completamente dinámico en el cual los objetos se podrían crear y modificar "sobre la marcha" (en tiempo de ejecución) en lugar de tener un sistema basado en programas estáticos. Conceptos fundamentales La programación orientada a objetos es una forma de programar que trata de encontrar una solución a estos problemas. PHP en su versión 5 se ha modificado. El Eiffel de Bertrand Meyer fue un temprano y moderadamente acertado lenguaje con esos objetivos. Su dominación fue consolidada gracias al auge de las Interfaces gráficas de usuario. Esto es así para mantener hegemónico el ideal de POO. BASIC. una extensión del lenguaje de programación C. Los componentes registrados como "privados" (private) también se heredan. La instanciación es la lectura de estas definiciones y la creación de un objeto a partir de ellas. Entre ellos destacan los siguientes:   Clase: definiciones de las propiedades y comportamiento de un tipo de objeto concreto. en gran parte debido a la aparición de Internet y a la implementación de la máquina virtual de Java en la mayoría de navegadores. incluyendo Ada. en gran parte debido a la influencia de C++. Por lo tanto. por su parte. se mantienen escondidos al programador y sólo pueden ser accedidos a través de otros métodos públicos. La adición de estas características a los lenguajes que no fueron diseñados inicialmente para ellas condujo a menudo a problemas de compatibilidad y en la capacidad de mantenimiento del código. Herencia: (por ejemplo. carecían de las características de las cuales muchos programadores habían venido a depender. se habla también de programación dirigida por eventos. se hicieron muchas tentativas para crear nuevos lenguajes basados en métodos orientados a objetos.

y que se utiliza para indicar distintas situaciones posibles para el objeto (o clase de objetos). así como la "función" es un procedimiento interno del método del objeto. la acción que genera. Atributos: características que tiene la clase Mensaje: una comunicación dirigida a un objeto. Identificación de un objeto: un objeto se representa por medio de una tabla o entidad que esté compuesta por sus atributos y funciones correspondientes. cuando lo están. No es visible al programador que maneja una instancia de la clase. Evento: es un suceso en el sistema (tal como una interacción del usuario con la máquina. Estado interno: es una variable que se declara privada.         Objeto: Instancia de una clase. relaciones y métodos. y cuyo valor puede ser alterado por la ejecución de algún método. informar y cambiar su estado. una "variable" no es más que un contenedor interno del atributo del objeto o de un estado interno. o un mensaje enviado por un objeto). los mismos que consecuentemente reaccionan a eventos. es lo que el objeto puede hacer. Método: algoritmo asociado a un objeto (o a una clase de objetos). que le ordena que ejecute uno de sus métodos con ciertos parámetros asociados al evento que lo generó. Los procesos. que hace los datos visibles desde fuera del objeto y esto se define como sus características predeterminadas. En comparación con un lenguaje imperativo. Características de la POO Existe un acuerdo acerca de qué características contempla la "orientación a objetos". El sistema maneja el evento enviando el mensaje adecuado al objeto pertinente. Entidad provista de un conjunto de propiedades o atributos (datos) y de comportamiento o funcionalidad (métodos). o con objetos internos del sistema (del programa). Cada objeto en el sistema sirve como modelo de un "agente" abstracto que puede realizar trabajo. que puede ser únicamente accedida y alterada por un método del objeto. Desde el punto de vista del comportamiento. Un método puede producir un cambio en las propiedades del objeto. Se corresponden con los objetos reales del mundo que nos rodea. cuya ejecución se desencadena tras la recepción de un "mensaje". y. una variedad de técnicas son requeridas para ampliar una abstracción. las funciones o los métodos pueden también ser abstraídos. donde se capturan sus comportamientos. o la generación de un "evento" con un nuevo mensaje para otro objeto del sistema. y "comunicarse" con otros objetos en el sistema sin revelar cómo se implementan estas características. El proceso de abstracción permite seleccionar las características relevantes dentro de un conjunto e identificar comportamientos comunes para . es decir. Componentes de un objeto: atributos. Es una instancia a una clase. También se puede definir como evento la reacción que puede desencadenar un objeto. Propiedad o atributo: contenedor de un tipo de datos asociados a un objeto (o a una clase de objetos). Las características siguientes son las más importantes:  Abstracción: denota las características esenciales de un objeto. identidad.

Los objetos heredan las propiedades y el comportamiento de todas las clases a las que pertenecen. las referencias y las colecciones de objetos pueden contener objetos de diferentes tipos. y la invocación de un comportamiento en una referencia producirá el comportamiento correcto para el tipo real del objeto referenciado. Herencia: las clases no están aisladas. tales como las plantillas y la sobrecarga de operadores de C++. al llamarlos por ese nombre se utilizará el comportamiento correspondiente al objeto que se esté usando.definir nuevos tipos de entidades en el mundo real. formando una jerarquía de clasificación. Esto asegura que otros objetos no puedan cambiar el estado interno de un objeto de manera inesperada. y cada tipo de objeto expone una interfaz a otros objetos que especifica cómo pueden interactuar con los objetos de la clase. sino que se relacionan entre sí. Estos módulos se pueden compilar por separado. es un módulo natural. Al igual que la encapsulación. pero tienen conexiones con otros módulos. permitiendo un acceso directo a los datos internos del objeto de una manera controlada y limitando el grado de abstracción. los lenguajes soportan la modularidad de diversas formas. permitiendo a los objetos ser definidos y creados como tipos especializados de objetos preexistentes. Esto permite aumentar la cohesión de los componentes del sistema. Modularidad: se denomina modularidad a la propiedad que permite subdividir una aplicación en partes más pequeñas (llamadas módulos). Estos pueden compartir (y extender) su comportamiento sin tener que volver a implementarlo. asociados a objetos distintos.  Encapsulamiento: significa reunir todos los elementos que pueden considerarse pertenecientes a una misma entidad. Algunos lenguajes proporcionan medios más estáticos (en "tiempo de compilación") de polimorfismo. La abstracción es clave en el proceso de análisis y diseño orientado a objetos. al mismo nivel de abstracción. eliminando efectos secundarios e interacciones inesperadas. Cuando esto ocurre en "tiempo de ejecución". ya que mediante ella podemos llegar a armar un conjunto de clases que permitan modelar la realidad o el problema que se quiere atacar. O. cada una de las cuales debe ser tan independiente como sea posible de la aplicación en sí y de las restantes partes. dicho de otro modo. La herencia organiza y facilita el polimorfismo y el encapsulamiento. Esto suele     . esta última característica se llama asignación tardía o asignación dinámica. El aislamiento protege a las propiedades de un objeto contra su modificación por quien no tenga derecho a acceder a ellas. Polimorfismo: comportamientos diferentes. solamente los propios métodos internos del objeto pueden acceder a su estado. Algunos lenguajes relajan esto. Algunos autores confunden este concepto con el principio de ocultación. Principio de ocultación: cada objeto está aislado del exterior. La aplicación entera se reduce a un agregado o rompecabezas de objetos. principalmente porque se suelen emplear conjuntamente. pueden compartir el mismo nombre.

. esta característica no existe y la memoria debe desasignarse expresamente. Cuando un objeto hereda de más de una clase se dice que hay herencia múltiple.  Recolección de basura: la recolección de basura o garbage collector es la técnica por la cual el entorno de objetos se encarga de destruir automáticamente.hacerse habitualmente agrupando los objetos en clases y estas en árboles o enrejados que reflejan un comportamiento común. ya que el entorno la asignará al crear un nuevo objeto y la liberará cuando nadie lo esté usando. y por tanto desvincular la memoria asociada. En la mayoría de los lenguajes híbridos que se extendieron para soportar el Paradigma de Programación Orientada a Objetos como C++ u Object Pascal. Esto significa que el programador no debe preocuparse por la asignación o liberación de memoria. los objetos que hayan quedado sin ninguna referencia a ellos.