Professional Documents
Culture Documents
Resumen, Lectura 4
Resumen, Lectura 4
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.
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.
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).
Interpretado
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.
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.
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).
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.
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
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.
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.
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.
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.
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.
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.
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.
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:
“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.
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
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
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.
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.
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.