You are on page 1of 17

Módulo 4.

Conceptos básicos de programación


Unidad 1. Características de los lenguajes.
Los lenguajes de programación son lenguajes formales necesarios para que un programador pueda
construir un software.

Utilizando un lenguaje de programación, un programador escribe el conjunto de sentencias que un


computador ejecutará.

Conceptos básicos:
Código fuente: se denomina así al código escrito directamente por el programador en un lenguaje
determinado. Contienen las instrucciones sobre qué es lo que la máquina debe hacer. Es donde se
vuelca la lógica empleada para resolver el caso de uso que genera el programa. Entiéndase por
Caso de uso al problema que trata de resolver el algoritmo.

Niveles de lenguajes
El nivel del lenguaje de programación indica la facilidad con la que el programador puede
comunicarse con el computador y darle instrucciones que tiene que ejecutar.

Lenguajes de alto nivel:

Tipo de lenguaje de programación que no expresa los algoritmos teniendo en cuenta la


capacidad que tienen las máquinas para ejecutar órdenes, sino al que se utiliza teniendo
en cuenta las capacidades cognitivas de los seres humanos.

Nos permiten abstraernos de las instrucciones que se deben ejecutar según la arquitectura del
ordenador, ya que contienen componentes que traducen el lenguaje de alto nivel en algo que
pueda ser ejecutado por la máquina seleccionada.

Para realizar la tarea de convertir un programa desde un lenguaje de alto nivel a un lenguaje de
bajo nivel, existen los compiladores. Un compilador es un programa que convierte o traduce el
código para que sus instrucciones sean entendibles por la máquina que las va a ejecutar.

Lenguajes de bajo nivel:

Generalmente son específicos de la arquitectura de la máquina en la que se ejecuta el código.


Prácticamente ejercen un control directo sobre el hardware
Tema 1. Compilado e interpretado
Una de las principales características de un lenguaje de programación es si funciona mediante
compilación o si es interpretado.

Compilado

Un lenguaje compilado es aquel que se escribe en un lenguaje de alto nivel y luego es traducido a
un ejecutable para una plataforma específica mediante un proceso llamado compilación. La
compilación valida que el código haya sido escrito correctamente (respetando la sintaxis).

Una vez terminada la compilación podemos ejecutar el programa resultante.

La principal ventaja de utilizar un lenguaje compilado es que su velocidad de ejecución es más


rápida que la de los interpretados. (C, C++, Golang).

En general, se utilizan lenguajes compilados cuando la eficiencia de ejecución es muy


importante.

Interpretado

Se considera como lenguaje interpretado a aquel que es traducido a instrucciones propias de la


plataforma línea por línea mientras es ejecutado. Traducción y ejecución se hacen en el mismo
momento.

Cada vez que ejecutamos un lenguaje interpretado, incluso si no cambiamos el código, se


interpreta y se traduce nuevamente al lenguaje de la plataforma.

La principal ventaja es que es muy independiente de la plataforma donde es ejecutado y más


flexible a la hora de codificar. El costo de esto es que, al ser interpretados y ejecutados al mismo
tiempo, estos lenguajes son más lentos.

En general, se utilizan lenguajes interpretados cuando se necesita que el programa se ejecute en


diversas plataformas y la eficiencia de ejecución no es tan importante.
Interpretado y compilado

Java es un lenguaje particular porque es compilado, pero a un lenguaje intermedio


llamado Bytecode, que es después interpretado. Los creadores de Java querían crear un
lenguaje compilado, pero que se pudiera ejecutar en cualquier sistema operativo y
procesador sin necesidad de crear varios ejecutables.

Tabla: Compilado vs Interpretado

Características Compilado Interpretado


Velocidad Muy alta Alta
Flexibilidad de codificación Muy Alta
Multiplataforma Media Alta
Procesamiento de Línea a línea. Siempre todo el código
traducción
Errores Se muestran al finalizar la Se muestran después de cada
compilación línea
Archivo ejecutable Sí No
Ejemplos C, C++, C#, GO Python, JavaScript, PHP, Perl,
Ruby, BASIC.

Tema 2. Tipado (estático, dinámico, fuerte, débil)


Podemos definir el tipado de un lenguaje de programación de la forma en la que los tipos y
variables son definidos. Para entender esto veamos, a modo introductorio, que son las variables.

Las variables son nombres que se asocian a un valor o dato específico, el cuál será utilizado
durante la ejecución del código. Dado que estos datos pueden ser diversos (números, letras,
símbolos o textos), se debe especificar qué tipo de dato se almacenará en las variables.

Lenguajes estáticos.

Es aquel que, una vez que definimos una variable de un tipo determinado, no permite que
cambiemos su tipo. Si delimitamos una variable de un tipo específico, solamente podemos
asignarle valores de ese tipo.

(Existen métodos que permiten la conversión de un tipo de datos a otro, si es necesario).

Lenguajes dinámicos

No se especifica de manera explícita el tipo de dato: los tipos se infieren o deducen mediante el
valor asignado a la variable en tiempo de ejecución. Otra diferencia es que una misma variable
puede tener diferentes tipos de valores en diferentes momentos.

Lenguajes débilmente tipados

Todos los lenguajes tienen chequeos de tipos. Por ejemplo, ningún lenguaje puede sumar un
número con una palabra, simplemente porque la suma es entre números. Un lenguaje débilmente
tipado realiza esos chequeos en tiempo de ejecución. Un ejemplo es Python.
Lenguajes fuertemente tipados

No esperan ejecutarse para realizar el chequeo de datos; lo realizan en paralelo con la compilación.
Un programa fuertemente tipado no llega a ejecutarse si tiene una operación inválida de tipos. (C+
+, C#, y Go).

Comparación de estáticos, dinámicos, fuertemente y débilmente tipados.

Características Lenguajes
Estáticos La definición de tipo de variables es fija, una vez Java
realizada, no se puede asignar otro tipo de datos C++
como valor C#
GO
Dinámicos Permiten que una variable deduzca el tipo al Python
momento en que se le otorga un valor. Esto
permite que una a misma variable se le puedan
asignar distintos tipos de valores en diferentes
momentos
Fuertemente tipados Controlan que el tipeo sea correcto al momento de C++
la compilación C#
GO
Débilmente tipados Controlan que el tipeo sea el correcto al momento Python
de la ejecución

Algunas características de la tabla anterior no son excluyentes; un lenguaje puede ser estático y
fuertemente tipado, o dinámico y débilmente tipado. Que sea estático o dinámico depende de la
forma en que se establezcan los tipos de variables; por otro lado, que sea fuerte o débilmente
tipado obedece al modo en que se realiza el chequeo de dichos datos.

Tema 3. Tipos de paradigmas (imperativo, declarativo, orientada a objetos).


Un paradigma es un concepto abstracto. Consiste en la definición de un modelo o patrón en
cualquier disciplina. Nace de una comunidad científica que decide plantear algún nuevo concepto
abstracto o una forma de pensar y resolver situaciones o problemas.

En programación, el paradigma determina cómo va a ser la estructura del proyecto, de los bloques
de código de los programas y de los elementos que los constituyen.

Paradigma imperativo

El paradigma imperativo se caracteriza por desarrollar software mediante un conjunto de


instrucciones que indican como realizar la tarea.

Paradigma declarativo

En el caso del paradigma declarativo, no definimos el conjunto de pasos o instrucciones, sino que
determinamos directamente el estado final de lo que deseamos obtener y le dejamos al
computador que defina cuál es el mejor método para hacerlo.
Uno de los lenguajes declarativos más utilizados es SQL (Structured Query Lenguage), empleado
para manipular base de datos.

Paradigma orientado a objetos

El paradigma orientado a objetos establece que podemos modelar y codificar la solución de un


problema identificando los objetos que participan en el proceso.

Un objeto puede definirse como cualquier entidad que sea capaz de tener algún atributo o
característica y de realizar una acción dentro del sistema.

Por ser similar a la forma en que los seres humanos resolvemos problemas de manera natural, el
paradigma orientado a objetos es uno de los más utilizados.

Paradigma Características Lenguajes


Imperativo En la codificación, se indica cómo llegar a un Java
resultado. El computador obedece las instrucciones C++
que el programador ha especificado, incluso si no es la C#
manera más eficiente GO
Python
Declarativo No se componen de instrucciones, el programador SQL
simplemente indica el resultado final al que se desea
llegar. El computador sabe cuál es la forma óptima
para llegar a ese resultado
Orientado a Modelan la codificación del sistema mediante los Java
objetos objetos que interactúan entre ellos. C#
Python

Tema 4: Multiplataformas
Un lenguaje multiplataforma es aquel que permite la ejecución de un programa (aplicación o
software) sin necesidad de compilarlo cada vez que cambiemos de plataforma.

Cuando hablamos de plataforma, nos referimos al sistema base en dónde va a correr nuestro
programa. Generalmente, se refiere al sistema operativo, pero puede haber casos en que también
se incluyen ciertos aspectos del hardware. Que pueden estar ligados al tipo de dispositivo, ya que
actualmente es necesario implementar aplicaciones tanto en computadoras y en servidores como
en dispositivos móviles.

Software multiplataforma

Puede ser implementado y utilizado en diferentes tipos de computadores con, incluso, diferentes
sistemas operativos. Construir un sistema multiplataforma obliga a tener en cuenta las diferentes
interfaces de programación de aplicaciones, para que este pueda operar independientemente de
la arquitectura.

No sólo es importante considerar los sistemas operativos, sino también tener en cuenta que las
arquitecturas y recursos de las computadoras o servidores pueden impedir que ciertas
funcionalidades se comporten de igual modo.
Aplicaciones web multiplataforma

Este tipo de aplicaciones tienen la ventaja de ser ejecutadas en navegadores que ya deben estar
instalados en la computadora del usuario (Google Chrome, Mozilla Firefox, Opera, Safari, Internet
Explorer, etc), por lo que son estos mismos los que se encargar de la interacción con el sistema
operativo y la máquina. Para esto, implementan una arquitectura cliente-servidor que permite que
gran parte de las funcionalidades del sistema estén en un servidor remoto. De todos modos,
algunas características de ellas pueden funcionar o no en todos los navegadores, lo que obliga al
programador a tener en cuenta estos posibles casos.

Unidad 2. Programación orientada a objetos.


El paradigma orientado a objetos ha sido el más utilizado, debido a su capacidad de modelar
problemas complejos de un modo fácilmente comprensible por todos los perfiles involucrados en
la construcción de un sistema (analistas, testers, programadores, etc.). Además, brinda
características que permiten reutilizar códigos y resolver rápidamente errores de programación.

La programación orientada a objetos produce modelos de los objetos del mundo real, ya sean
tangibles (alumnos, profesores, etc.) o intangibles (exámenes orales, asistencias, legajos, etc.), que
son plasmados en el software. Al coincidir con la manera natural de pensar, este tipo de software
nos proporciona una forma intuitiva de observar el proceso de programación, modelando los
atributos y los comportamientos de los objetos del mundo real.

Tema 1. Introducción y origen


La programación orientada a objetos tiene sus orígenes en el MIT a fines de la década de 1950, con
el lenguaje Lisp. (IA)

La definición formal de objetos fue introducida unos años después a trabes de Simula 67, un
lenguaje de programación para simulación de eventos discretos. Simula 67 introdujo los conceptos
de clases, subclases e instancias.

Ya en la década de los 70, se introdujo la expresión programación orientada a objetos en el


lenguaje Smalltalk, para representar el uso de objetos y mensajes para la base del desarrollo
computacional.

En 1985, Bartran Meyer desarrolla el primer diseño de Eiffel, un lenguaje puramente orientado a
objetos, además de un conjunto de herramientas para modelar todo el ciclo de perfeccionamiento
de software.

En los 90, la programación orientada a objetos fue ampliamente aceptada y se convirtió en la


forma predominante para desarrollar ´software. Hoy en día, existen lenguajes como Java o C# que
son puramente orientados a objetos, mientras que otros, como Python o Ruby, son compatibles
tanto para el desarrollo en objetos como para otros paradigmas.

Lenguaje Java

Java es un lenguaje de programación de alto nivel y de propósito general. Si bien permite aplicar
los conceptos de múltiples paradigmas, está fuertemente basado en el paradigma de
programación orientada a objetos. Esto se debe a que la estructura de los sistemas que permite
construir está basada en el paradigma del mismo nombre. Que sea de propósito general significa
que permite crear una gran cantidad de diferentes sistemas y para todo tipo de dispositivos.

Podemos clasificar a java como de tipo estático y fuertemente tipado.

Historia

Java fue desarrollado por Sun Microsystems en la década de los 90. Fue presentado en 1995 y se
ha convertido en uno de los lenguajes más populares. Inmediatamente ganó mucha popularidad
ya que los programas que se construyen con esta herramienta, integrados a una tecnología
particular, son multiplataforma. James Gosling y su equipo lograron desarrollar un lenguaje
independiente de la plataforma, el cual permite construir aplicaciones una sola vez, que luego
pueden ejecutarse en distintas arquitecturas y sistemas operativos. Para tal fin, se utiliza un
entorno de ejecución para los programas compilados. Este entorno se denomina Java Runtime
Enviroment (JRE), es gratuito y está disponible para los principales sistemas operativos.

Plataforma de Java

Para la construcción de un programa con Java, se escriben los códigos fuente de alto nivel con
dicho lenguaje, los cuales son compilados a un lenguaje intermedio, de más bajo nivel,
denominado Bytecode. Estos últimos códigos, producidos por el compilador, son considerados
como los ejecutables y son los utilizados por las plataformas para poner en marcha el sistema. Se
denomina Bytecode, ya que las sentencias que contiene se almacenan en bytes. Este proceso de
transformación de código es realizado por el compilador de Java, cuya función principal es verificar
que el código escrito en lenguaje Java, respete sus sintaxis y generar el resultante. Dentro del
paquete de herramientas de Java, se realiza esta acción con el comando JAVAC, el cual toma como
entrada archivos con extensión .java, donde el programador escribe sus códigos, y genera archivos
con extensión .class, con el código ejecutable compilado.
Ediciones de Java
Java es distribuido en tres diferentes ediciones:

 Java Standard Edition (Java SE).


 Java Enterprise Edition (Java EE).
 Java Micro Edition (Java ME).

“La Java Standard Edition, también conocido como Java SE, es la edición estándar de Java, la
versión original de Sun Microsystems. Con esta versión, nosotros podemos crear tanto aplicaciones
web como aplicaciones de escritorio”

Luego de Java SE, surgió la Java Enterprise Edition, también conocida como Java EE; se trata de la
edición más grande de Java. “Esta edición contiene toda la Standard Edition y mucho más. Por lo
general, es utilizada para crear aplicaciones con la arquitectura cliente servidor” y fue pensada
para el mundo empresarial.

En último lugar, se encuentra la Java Micro Edition, también conocida como Java ME; es una
versión reducida de la edición Java Standard Edition. Esta edición se concentra en la creación de
aplicaciones tanto en dispositivos móviles como en dispositivos integrados.

Java virtual machine o máquina virtual de Java


Lo que más caracteriza a Java por sobre otros lenguajes es su capacidad de ejecutarse en
diferentes plataformas, mediante lo que se denomina Java virtual machine (máquina virtual de
Java o JVM, por sus siglas en inglés).

La JVM es una de las herramientas del JRE de Java: es el entorno encargado de ejecutar los
archivos generados por el compilador y de lograr la integración de la aplicación con la plataforma
en la que debe funcionar; esta herramienta es una especie de intérprete que ejecuta las
instrucciones de los archivos .class.
Tema 2. Conceptos fundamentales
Dentro de los principales conceptos de la programación orientada a objetos, podemos identificar
los siguientes:

 Clases
 Objetos
 Atributos
 Métodos
 Mensajes
 Encapsulamiento
 Herencia
 Abstracción
 Polimorfismo.

Clases

Es un modelo que se utiliza para describir uno o más objetos del mismo tipo. Cada vez que se crea
un objeto a partir de una clase determinada, se construye una instancia de esa clase. Es
importante definir que un objeto es una instancia de una clase. Las clases definen qué atributos y
comportamientos tendrán los objetos, pero no especifican cómo serán los valores de dichos
atributos ni los resultados de esos comportamientos.

Una clase puede tener muchas instancias y cada una de ellas es un objeto independiente
Objetos

Son el elemento fundamental de la programación orientada a objetos. Los valores de sus atributos
definen el estado del objeto, mientras que los métodos definen su comportamiento.

La principal diferencia entre objeto y clase es que de una clase podemos crear uno o más objetos,
pero un objeto siempre está asociado a una única clase al crearse. Otra diferencia es que los
objetos tienen definidos valores para sus atributos, mientras que las clases solo definen los
atributos, no los valores.

Atributos

Son variables que representan características de un objeto. Los atributos son capaces de contener
información y son el componente fundamental de un objeto, a tal punto que definen su estado.

Métodos

Conjunto de operaciones que un objeto puede realizar, dado su estado actual. Recordemos que el
estado de un objeto está definido por el valor de sus atributos.

Los métodos son funciones que especifican una acción; por este motivo, los métodos definen el
comportamiento de los objetos. Los métodos siempre están asociados a un objeto determinado y
su ejecución solo puede desencadenarse mediante un mensaje recibido.

Mensajes

Un mensaje es una petición de un objeto a otro para que este último realice una acción específica
ejecutando uno de sus métodos. Los mensajes relacionan a los objetos entre ellos; por esta razón,
son un componente primordial.

Clases en Java

Para desarrollar un proyecto en Java, es necesario construir cada una de las clases que se utilizarán
para representar a los objetos que se instancian cuando la aplicación comienza a funcionar.
Tema 3. Características
Para programar una clase, se deben detallar todos los atributos de ella con el tipo de dato asociado
y, además, los métodos con el valor que retoman a quienes lo invocan (un método puede devolver
un valor o no), el valor de los parámetros de entrada que necesitan para ejecutarse (algunos
métodos no tienen parámetros de entrada) y el código que define el comportamiento que van a
tener los objetos.

Encapsulamiento

La información dentro de un objeto es privada para ese objeto y solo a ese objeto. La información
es definida por el valor de sus atributos. Solo podemos acceder a los valores de los atributos de un
objeto mediante métodos, nunca directamente leyendo los atributos.

El encapsulamiento en una clase de Java se logra utilizando los modificadores private y public.
Dentro solo los objetos podrán acceder a sus propios atributos, ya que se definieron como
privados. Por el contrario, los métodos públicos podrán ser visibles por el resto de los objetos, por
lo que podrán enviarle los mensajes para que ejecuten esos comportamientos. Si algunos métodos
son solamente utilizados dentro de otros de la clase, y no se quieren exhibir al resto de los objetos,
también se pueden definir como privados.

Encapsular los atributos les da la posibilidad a los objetos de ser ellos quienes controlen los
cambios, establezcan los posibles valores y validen la información que va a definir su propio estado
interno.
Herencia

Podemos definir la herencia como la propiedad que permite a los objetos construirse a partir de
otros objetos.

La herencia permite que definamos una clase y que luego creemos subclases a partir de ella,
reutilizando lo definido en la primera para crear otras clases de objetos.

La herencia impone una relación jerárquica entre clases, en la que una clase hija “hereda” los
atributos y métodos de su clase padre. Existen dos tipos de herencia: si una clase recibe
propiedades de más de una clase base, se denomina herencia múltiple; si, por el contrario, solo
puede recibir características de solo una clase padre, se denomina herencia simple. En Java, sólo
se puede aplicar herencia simple.

La principal ventaja de la herencia es que nos ayuda a reutilizar códigos, ya que nos evita definir
muchas veces atributos que son comunes a diferentes clases de objetos.

Para indicar en Java que una clase hereda a otra, se utiliza la palabra extends.
Abstracción

La abstracción puede definirse como la extracción de las propiedades esenciales de un concepto.


La abstracción nos ayuda a no enfocarnos en los detalles que no son importantes para lo que
estamos realizando. Implica la identificación de los objetos con sus atributos y métodos
particulares. Podemos definirla también como la capacidad de encapsular y aislar la información
que deseamos incluir en nuestros objetos. Pueden existir diferentes tipos de abstracción y
diferentes visiones de la abstracción.

Polimorfismo

“En programación orientada a objetos, polimorfismo es la capacidad que tienen los objetos de una
clase en ofrecer respuesta distinta e independiente en función de los parámetros utilizados
durante su invocación”. En una relación de herencia, incluso las clases hijas pueden redefinir
comportamientos que heredaron de su clase padre, lo cual se logra incorporando un método de
igual nombre, que le brinda la posibilidad de tener un comportamiento diferente.

Instanciar objetos

Para crear instancias de clases ya construidas, se utiliza el comando new. Durante la programación,
todo el tiempo se estarán construyendo nuevos objetos que interactúan con los ya existentes. Para
poder realizar esta acción, las clases deben tener aplicado un método particular, llamado
constructor. Se llama igual que el nombre de la clase y genera como resultado una instancia de
esta. Se encargan de inicializar atributos y configurar todo lo que sea necesario, antes de que
comience a existir el objeto. Es posible tener más de un constructor en una misma clase,
dependiendo de los estados iniciales que se necesitan para las nuevas instancias.
Tema 4. Estructuras de control en Java
La sentencia if

System.out.println

En Java esta sentencia se usa para imprimir en la consola o salida estándar. Lo que se imprime es el
código que está contenido entre paréntesis.

Matemáticamente, no se puede realizar una división por cero; por lo tanto, es necesario un if para
evitar que el código produzca un error

Concatenación

El operador + aplicado a strings realiza la concatenación de dos cadenas de caracteres. Si se aplica


un string y a un dato de otro tipo, este último es convertido en su equivalente en string y el
resultado es la concatenación de ambos operandos.

La sentencia else

Podemos utilizar un bloque else. En este bloque, se puede informar que la operación que se
intenta realizar no es válida.
Con la utilización de un else (siempre asociado a un if), podemos ejecutar caminos alternativos, en
caso de que la expresión booleana sea falsa.

La sentencia switch

Evalúa el contenido de la variable de tipo string operación y lo compara con cada uno de los
bloques case. Si uno de los bloques case espera un valor igual al que tiene la operación, se ejecuta
el bloque de código que contiene. La sentencia break indica la finalización de todo el bloque
switch.

En Java, el bloque default se ejecuta cuando no existen coincidencias entre el contenido de la


expresión analizada y lo esperado por las sentencias case. El uso de este bloque es opcional.

La sentencia while

La sentencia while es una de las estructuras repetitivas más utilizadas. En el caso de que se tenga
que repetir la ejecución de un conjunto de sentencias mientras, se cumple una condición
booleana.

Se mostrará y, posteriormente, se incrementará el valor de una variable, mientras su valor


almacenado sea menor o igual que cinco. En el punto en que esta variable pase a valer seis, la
expresión booleana ya no será verdadera; por lo tanto, el bloque while finaliza el ciclo de
repeticiones.
La sentencia do-while

La sentencia for

Java aplica una variación del for llamada foreach, que facilita el recorrido de listas o arreglos de
valores.

Desarrollar en Java requiere, además de conocer la sintaxis y semántica del lenguaje, comprender
conceptos muy importantes del paradigma de programación orientado a objetos.
Entornos de desarrollo integrado

Son herramientas particulares que facilitan la tarea del programador. Estas herramientas se llaman
entornos de desarrollo integrado (IDE, por sus siglas en inglés). Los IDE, entre muchas otras
cuestiones, ofrecen un procesador de texto (para escribir el código fuente) con autocompletado
inteligente, análisis de sintaxis, asistente de resolución de errores y herramientas para pruebas de
código.

You might also like