SlideShare una empresa de Scribd logo
Tema	
  1.	
  Introducción	
  a	
  los	
  lenguajes	
  de	
  programación	
  
Programación	
  en	
  Lenguaje	
  Java	
  
Michael	
  González	
  Harbour	
  
Mario	
  Aldea	
  Rivas	
  
Departamento	
  de	
  Matemá.cas,	
  
Estadís.ca	
  y	
  Computación	
  
Este	
  tema	
  se	
  publica	
  bajo	
  Licencia:	
  
Crea.ve	
  Commons	
  BY-­‐NC-­‐SA	
  4.0	
  
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 1
UNIVERSIDAD
DE CANTABRIA
Programación en Java
1. Introducción a los lenguajes de programación
• Lenguajes de alto nivel. El proceso de compilación. El ciclo de vida del software.
Concepto de algoritmo. Concepto de clase y objeto. Diagramas de clases.
Estructura de un programa. Estructura de un método.
2. Datos y expresiones
3. Estructuras algorítmicas
4. Datos Compuestos
5. Entrada/salida
6. Clases, referencias y objetos
7. Modularidad y abstracción
8. Herencia y polimorfismo
9. Tratamiento de errores
10 ..., 11 ...
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 2
UNIVERSIDAD
DE CANTABRIA
1.1. Lenguajes de programación
Las instrucciones de un programa son códigos numéricos almacenados
en la memoria del computador
Ejemplo de lenguaje máquina para el microprocesador 68000: suma de
dos enteros:
Dirección Código Binario Código Ensamblador Alto Nivel
$1000 0011101000111000 MOVE.W $1200,D5 Z=X+Y
$1002 0001001000000000
$1004 1101101001111000 ADD.W $1202,D5
$1006 0001001000000010
$1008 0011000111000101 MOVE.W $D5,$1204
$100A 0001001000000100
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 3
UNIVERSIDAD
DE CANTABRIA
Programación del computador
La programación mediante códigos numéricos se conoce como
lenguaje máquina
• es muy compleja
Por ello se necesitan lenguajes de programación más cercanos a los
programadores
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 4
UNIVERSIDAD
DE CANTABRIA
Lenguajes de alto y bajo nivel
Necesitamos escribir programas en un lenguaje más cómodo para los
humanos
• lenguaje de bajo nivel o ensamblador
- cada instrucción corresponde a una instrucción de lenguaje máquina
- es dependiente de la máquina
- teóricamente más eficientes
• lenguajes de alto nivel
- instrucciones más abstractas y avanzadas
- son lenguajes independientes de la máquina
- en la práctica, mucho más productivos
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 5
UNIVERSIDAD
DE CANTABRIA
Notas:
Para hacer accesible la programación de un computador a cualquier persona, existen lenguajes de
programación que tienen como función presentar al usuario el computador de acuerdo con un modelo
abstracto (informático) sencillo e independiente de su estructura electrónica interna:
Los lenguajes tienen dos categorías
• Lenguaje ensamblador o de bajo nivel. Cada instrucción de lenguaje ensamblador se
corresponde con una instrucción de lenguaje máquina, pero en lugar de codificarse mediante números
se codifica mediante símbolos alfanuméricos, más fáciles de recordar. En teoría se puede conseguir
más eficiencia, pues podemos usar toda la potencia ofrecida por la máquina. En la práctica, programar
en lenguaje ensamblador es tedioso, difícil, con mucha facilidad para cometer errores y, por tanto,
poco productivo
• Lenguajes de alto nivel. Permiten programar utilizando un lenguaje más próximo al humano, e
independiente de la máquina. Ejemplos de este tipo de lenguajes son el Java, FORTRAN, C, BASIC,
Pascal, Ada, etc. Los lenguajes de alto nivel producen un código un poco menos eficiente que el
ensamblador, pero más sencillo de escribir y mantener, con menos errores, y mucho más productivo.
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 6
UNIVERSIDAD
DE CANTABRIA
Traductores: ensambladores,
compiladores e intérpretes
Son programas que traducen un programa de aplicación escrito en un
lenguaje de programación, a un programa en lenguaje máquina:
• lenguaje ensamblador: se traduce mediante un programa
ensamblador
• lenguajes de alto nivel: se traducen mediante compiladores e
intérpretes
- los compiladores traducen el programa de aplicación antes de que éste
se ejecute
- los intérpretes van traduciendo el programa de aplicación a medida
que se va ejecutando
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 7
UNIVERSIDAD
DE CANTABRIA
Notas:
El vendedor de un computador, acompaña el equipo físico con un conjunto de programas de ayuda,
desarrollados por él o por personas especializadas, que tienen como función presentar al usuario el
computador de acuerdo con un modelo abstracto (informático) sencillo e independiente de su estructura
electrónica interna:
• ensambladores, compiladores e intérpretes
• sistema operativo
• entorno de desarrollo y algunos programas de aplicación
Los ensambladores, compiladores e intérpretes traducen un programa escrito en un lenguaje más o menos
cómodo para el usuario, a lenguaje máquina. Según el lenguaje utilizado, las herramientas son:
• Lenguajes de bajo nivel: se utiliza un programa ensamblador, que traduce los símbolos
alfanuméricos a código máquina, por medio de algoritmos muy simples.
• Lenguajes de alto nivel. La traducción a lenguaje máquina se hace mediante compiladores (que
traducen el programa escrito en lenguaje de alto nivel de forma completa antes de su ejecución) e
intérpretes (que traducen cada instrucción mientras se ejecuta el programa). Los intérpretes son más
lentos en la ejecución, ya que tienen que hacer el trabajo de traducción cada vez que se ejecuta el
programa. Hoy en día es más habitual usar compiladores.
Los lenguajes de programación de alto nivel han sido definidos como una solución intermedia entre los
lenguajes naturales humanos y los lenguajes máquina de los computadores. Están bien definidos,
en el sentido de que la tarea que se puede expresar con ellos no es ambigua y por lo tanto pueden ser
traducidos en un programa máquina concreto, de forma automatizada y por el propio (aunque no
necesariamente) computador que va a realizar la tarea.
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 8
UNIVERSIDAD
DE CANTABRIA
Ejemplos de lenguajes de alto nivel
Los inicios:
• Fortran: 1956, para cálculo científico
- estándares: 1966, 1977, 1990, 1997, 2003, 2008
• Cobol: 1960, para aplicaciones de gestión
- estándar actual: 2002
• Lisp: 1959, para inteligencia artificial
- estandarizado por ANSI en 1994 (common LISP)
- estandarizado por ISO en 1997, actualizado en 2007 (ISLISP)
• Basic: 1964, para docencia, interpretado
- Visual Basic - Visual Studio 2012 (Microsoft)
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 9
UNIVERSIDAD
DE CANTABRIA
Notas:
Existen muchos lenguajes de alto nivel de propósito general, sus principales diferencias se encuentran en
que poseen un conjunto de órdenes mas adecuado para expresar tareas de un tipo concreto de problema
o porque corresponden a distintos niveles de evolución de los computadores:
FORTRAN (FORmula TRANslation). Su nombre evidencia la orientación matemática de uno de los lenguajes
de alto nivel mas antiguos, que aún perduran. J. Backus lo desarrolló en 1956. Aunque ha perdido terreno
frente a los lenguajes mas modernos, todavía es ampliamente utilizado en aplicaciones científicas de
grandes cálculos numéricos, porque probablemente, es el lenguaje con mayor número de librerías,
desarrolladas y comprobadas por mucha gente, a lo largo de su historia.
COBOL (COmmon Business Oriented Language). Se trata del lenguaje que ha alcanzado una mayor
resonancia en las tareas de gestión. Su desarrollo fue promovido por el Departamento de Defensa de Los
EEUU, en 1960. El lenguaje ha sufrido muchas extensiones, y ha sido actualizado recientemente.
LISP (LISt Processing). El Massachusetts Institute of Technology creó, en 1959, este lenguaje de alto nivel
orientado a aplicaciones de inteligencia artificial. La programación de procesos recurrentes (edificados sobre
datos procesados en los pasos anteriores) es uno de los puntos fuertes del LISP.
BASIC (Beginners All-purpose Symbolic Instruction Code). Nació entre 1964 y 1965 en el Dartmouth
College como una herramienta para la enseñanza. Con el tiempo han ido proliferando los dialectos y
versiones, hasta el punto de que es raro el fabricante que no desarrolla un dialecto para sus propios equipos.
Fue muy popular por su sencillez, pero tiene carencias importantes.
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 10
UNIVERSIDAD
DE CANTABRIA
Ejemplos de lenguajes (cont.)
Hacia la programación estructurada:
• Pascal: 1969, para docencia, programación estructurada
• C: 1972, para programación del software del sistema
- estandarizado en 1990, 1999, y 2011
• Ada: 1983, para sistemas de alta integridad, incluyendo sistemas de
tiempo real
- estandarizado en 1983
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 11
UNIVERSIDAD
DE CANTABRIA
Notas:
PASCAL (En honor del matemático francés Blaise Pascal). Es un lenguaje de programación desarrollado por
el profesor Nicklaus Wirth, en 1969, en el Instituto Federal de Tecnología de Zurich partiendo de los
fundamentos del ALGOL. Fue uno de los primeros lenguaje que incorporaron los conceptos de programación
estructurada. Aunque fue muy popular, la dificultad para partir el programa en módulos y la falta de
estandarización han hecho decaer su uso.
C. Es un lenguaje de programación desarrollado por la Bell Laboratories, en principio para trabajar con el
sistema operativo UNIX. Quizás por ello, la popularidad del 'C' es muy alta. Es un lenguaje que, al mismo
tiempo que permite una programación en alto nivel, permite una gran aproximación a la máquina. Muchos
lo consideran un lenguaje intermedio entre alto y bajo nivel. Como estos últimos, presenta alta eficiencia y
escasa fiabilidad. Es fácil cometer errores en C.
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 12
UNIVERSIDAD
DE CANTABRIA
Ejemplos de lenguajes (cont.)
Lenguajes de programación orientada a objetos:
• Smaltalk: 1980, para programación orientada a objetos
- estandarizado en 1998
• C++: 1987, extensión mejorada del C que incorpora programación
orientada a objetos
- estandarizado en 1998, estandarizado de nuevo en 2011
• Java: 1995, para programación orientada a objetos en sistemas
distribuidos (red Internet)
- versión actual: Java 7 (2011)
- ofrecido como software libre en 2007
• Ada 95, Ada 2005, Ada 2012: versiones mejoradas del anterior,
incluyendo programación orientada a objetos
- estandarizado en 1995, 2005 y 2012
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 13
UNIVERSIDAD
DE CANTABRIA
Notas:
SMALTALK: Lenguaje de programación orientada a objetos puro. Es muy ineficiente con respecto a
lenguajes procedurales como el C o el Ada, pero es cómodo de usar y de programar en él.
JAVA: Lenguaje derivado del C en cuanto a sintaxis, pero más parecido al Ada 95 en cuanto a las
comprobaciones que hace el compilador y soporte de la programación concurrente. Está pensado para su
ejecución en sistemas distribuidos (internet). Existe un código intermedio, bien definido, que puede
intercambiarse entre computadores diferentes para luego ser traducido y ejecutado.
C++: Extensión del lenguaje C que mejora algunos de sus inconvenientes, y añade construcciones de
programación orientada a objetos. Entre las mejoras destacan una mayor comprobación de los tipos de
datos por parte del compilador, las excepciones, y las plantillas genéricas.
ADA (En honor de Lady Augusta ADA Byron). El ADA es un lenguaje inspirado en el PASCAL, que fue
promovido por el Departamento de Defensa de Los EEUU. El objetivo de su desarrollo era conseguir un
lenguaje con posibilidades de convertirse en un estándar universal y que facilitara la ingeniería de software
y el mantenimiento de los programas. Entre sus campos de aplicación se incluyen los sistemas de tiempo
real y los sistemas de alta integridad. El 1995 se revisó el lenguaje para mejorarlo y para añadirle
construcciones de programación orientada al objeto. En 2005 se finalizó una nueva versión y en 2012 se
está completando una nueva.
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 14
UNIVERSIDAD
DE CANTABRIA
Ejemplos de lenguajes (cont.)
Otros lenguajes de programación:
• C# (C sharp): orientado a objetos y orientado a componentes;
sintaxis basada en C++
- introducido por Microsoft en 2000, estandarizado por ISO en 2003 y
2006 (versión 2.0)
- versión actual: 5.0 (2012)
• Objective-C: es un superconjunto de C al que se añade la
programación orientada a objetos de Smalltalk
- se utiliza como lenguaje de programación principal de Apple para OS X
e iOS
- versión actual: 2.0 (2007)
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 15
UNIVERSIDAD
DE CANTABRIA
Ejemplos de lenguajes (cont.)
Lenguajes de guiones o “scripts”:
• PHP: desarrollado para hacer páginas Web dinámicas, soportado por
la mayoría de servidores Web
- desarrollado en 1995, versión actual 5.5 (2013)
• Perl: interpretado, con tipos dinámicos, no es orientado a objetos.
Tiene facilidades de manipulación de textos
- desarrollado en 1987, versión actual 5.16 (2012)
• Python: habitualmente interpretado, orientado a objetos, con tipos
dinámicos; hace énfasis en la legibilidad
- es de finales de los 80; versión actual 3.3 (2013)
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 16
UNIVERSIDAD
DE CANTABRIA
Ejemplos de lenguajes (cont.)
Lenguajes de guiones o “scripts” (continuación):
• JavaScript: interpretado, orientado a objetos, soportado por
muchos navegadores Web. Sintaxis inspirada en Java
- creado en 1995, propiedad de Oracle; versión actual 1.8.5 (2011)
- estandarizado en 1997 como ECMAScript; versión actual 5.1 (2011)
• Ruby: Lenguaje de “scripts”, interpretado, orientado a objetos, con
tipos dinámicos. Sintaxis inspirada en Perl y Smalltalk
- creado en 1993, no estandarizado
- versión actual 2.0.0 (2013)
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 17
UNIVERSIDAD
DE CANTABRIA
Notas:
Un lenguaje de “scripts” o de guiones es un lenguaje de programación para controlar la ejecución de otras
aplicaciones. Suelen ser interpretados. Tienen mucho éxito para programar aplicaciones web.
Un lenguaje con tipos dinámicos es aquel en el que la comprobación del tipo de dato que se está utilizando
se hace durante la ejecución, en lugar de hacerse de manera estática durante la compilación.
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 18
UNIVERSIDAD
DE CANTABRIA
Ránking de lenguajes de programación
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 19
UNIVERSIDAD
DE CANTABRIA
Notas:
Fuente:
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
Fecha: Sep 2015
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 20
UNIVERSIDAD
DE CANTABRIA
El lenguaje Java
Desarrollado por la empresa Sun Microsystems (ahora Oracle) en 1995
Recibe una amplia aceptación
Objetivos generales:
• WORA: (Write Once, Run Anywhere)
• Portabilidad sin necesidad de recompilar
• Programación distribuida
• Orientado a objetos
- abstracción de datos
- modularidad, encapsulado, y ocultamiento de información
- herencia y polimorfismo
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 21
UNIVERSIDAD
DE CANTABRIA
El lenguaje Java (cont.)
Objetivos generales (cont.):
• Más fiable y seguro que C o C++:
- memoria dinámica automática, que evita los punteros explícitos
- tipificación estricta
- comprobación automática de tamaños de variables
• Sintaxis similar a la del C/C++
• Concurrencia integrada en el lenguaje
• Excepciones declaradas
• Interfaz gráfica integrada en el lenguaje
La versión actual es la 1.8 (Java 8)
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 22
UNIVERSIDAD
DE CANTABRIA
1.2. El proceso de compilación
Ficheros de
código fuente
Editor
de
texto
Preprocesador
Ficheros de
código objeto
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
Librerías
Enlazador
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
Programa
Ejecutable
“Front-end”
“Back-end”
Ensamblador
Código fuente final
Código intermedio
Código ensamblador
Código objeto
Compilador
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 23
UNIVERSIDAD
DE CANTABRIA
Notas:
Un compilador puede definirse como una herramienta automática de traducción que lee un programa escrito
en un lenguaje (el lenguaje fuente) y lo traduce a un programa equivalente en otro lenguaje (el lenguaje
objeto). En el proceso de traducción el compilador notifica al usuario de la presencia de errores en el
programa fuente.
La variedad de compiladores que pueden aparecer es muy alta. Existen miles de lenguajes fuente.
Igualmente ocurre con los lenguajes objeto: pueden ser otros lenguajes de programación, o el lenguaje
máquina de cualquier computador entre un microprocesador o un supercomputador. En cualquier caso las
tareas que debe realizar son las mismas.
Además del compilador también son necesarios otros programas para crear un programa ejecutable: el
preprocesador, el ensamblador, el enlazador, y el cargador. En la figura de arriba se muestra un proceso de
compilación típico.
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 24
UNIVERSIDAD
DE CANTABRIA
Compilación para máquina virtual
Ficheros de
código fuente
Editor
de
texto
Preprocesador
Ficheros con
“clases”
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
010010101010101010000010101000101010101010101010
Librerías
Intérprete
“Front-end”
“Back-end”
Código fuente final
Código intermedio
Código de Máquina
Compilador
Virtual
Nativas
Cargador
Dinámico
de Clases
Máquina
Virtual
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 25
UNIVERSIDAD
DE CANTABRIA
Notas:
La arquitectura del entorno de ejecución de programas Java se basa en una máquina virtual, que se ejecuta
en el computador para interpretar las instrucciones del programa del usuario descritas en un código
intermedio especial, llamado código de máquina virtual Java (el Java Byte Code).
La idea principal de esta arquitectura es la de “Escribir una vez, ejecutar en cualquier sitio”. El compilador
de Java no genera código máquina de un computador concreto, sino un código especial, que luego es
interpretado por otro programa, llamado máquina virtual, que existe en cada computador en el que se desea
ejecutar el programa Java. De este modo, un programa Java se puede ejecutar indistintamente en cualquier
computador que disponga de esa máquina virtual, sin necesidad de recompilarlo.
Adicionalmente, en la arquitectura Java los programas no se enlazan antes de su ejecución, sino que se
utiliza un enlazado dinámico. Cuando se hace una llamada a una operación de un módulo (clase) que no
está cargado en la máquina virtual, ésta se encarga de buscar ese módulo y cargarlo en ese momento en
la máquina virtual.
Desde el programa del usuario se pueden utilizar operaciones “nativas”, suministradas por la máquina
virtual, escritas generalmente en código máquina, y que pueden acceder a los dispositivos hardware del
computador. El resultado es: programas muy portables, muy dinámicos, aunque poco eficientes.
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 26
UNIVERSIDAD
DE CANTABRIA
1.3. El ciclo de vida del software
Codificación
Pruebas
Requisitos
Análisis de
Requisitos
Informales
Documento de
Análisis de
Especificaciones
Requisitos
Documento de
Especificaciones
Diseño de la
Arquitectura
Diseño
Detallado
Arquitectura
del Programa
Diseño de cada
Módulo
Módulos de
Programa
de Unidad
Pruebas
de Integración
Pruebas
de Sistema
Pruebas
de Aceptación
Ciclo en V
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 27
UNIVERSIDAD
DE CANTABRIA
Notas:
Los pasos que se siguen generalmente a la hora de desarrollar un programa son los siguientes:
• Análisis de requisitos: Se define el problema a resolver y todos los objetivos que se pretenden, pero
sin indicar la forma en la que se resuelve.
• Especificación: Se determina la forma en la que se resolverá el problema, pero sin entrar aún en su
implementación informática. Se determina asimismo la interfaz con el usuario.
• Diseño de la arquitectura del programa: Se divide el problema en módulos, se especifica lo que
hace cada módulo, así como las interfaces de cada uno de ellos.
• Diseño detallado de los módulos: Para cada módulo se diseñan detalladamente las estructuras de
datos y los algoritmos a emplear.
• Codificación: Se escribe el programa en el lenguaje de programación elegido.
• Pruebas de módulos: Se prueban los módulos del programa aisladamente y se corrigen los fallos
hasta conseguir un funcionamiento correcto.
• Integración y Prueba de sistema: Se unen todos los módulos, y se prueba el funcionamiento del
programa completo.
• Prueba de aceptación: Instalación en el lugar definitivo y aceptación por parte del cliente
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 28
UNIVERSIDAD
DE CANTABRIA
Distribución del Esfuerzo de desarrollo
análisis y diseño
codificación
pruebas e
integración
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 29
UNIVERSIDAD
DE CANTABRIA
Coste de los sistemas informáticos
Los errores software tienen un alto coste: efecto y corrección
0
2.5
6.3
16
40
100
Ana Dis Cod Int Pru Man
Costerelativodecorregirunerror
Etapa en que se detecta el error
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 30
UNIVERSIDAD
DE CANTABRIA
Coste de los sistemas informáticos
Relación entre el coste de HW y SW
0
20
40
60
80
100
1955 1970 1995
Hardware
Software
%delcostetotal
Año
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 31
UNIVERSIDAD
DE CANTABRIA
1.4. Concepto de algoritmo
Un algoritmo es:
• una secuencia finita de instrucciones,
• cada una de ellas con un claro significado,
• que puede ser realizada con un esfuerzo finito
• y en un tiempo finito
El algoritmo se diseña en la etapa de diseño detallado y se corresponde
habitualmente con el nivel de operación o método
Los programas se componen habitualmente de muchas clases que
contienen algoritmos, junto con datos utilizados por ellos
• los datos y algoritmos relacionados entre sí se encapsulan en la
misma clase
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 32
UNIVERSIDAD
DE CANTABRIA
Ejemplo de algoritmo
Programa que intenta mantener una habitación a una temperatura
deseada (± 0.5 grados)
• dispone de un radiador que se puede encender y apagar,
• y un termómetro
Variables:
• tempDeseada: magnitud real (ºC)
• tempAmbiente: magnitud real (ºC)
• estadoRadiador: encendido o apagado
Estado del programa:
• valor de tempDeseada, tempAmbiente, y estadoRadiador en
cada instante
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 33
UNIVERSIDAD
DE CANTABRIA
Ejemplo (cont.)
Algoritmo
repetir continuamente lo siguiente
si hace frío encender el radiador
si hace calor apagar el radiador
esperar un rato
fin repetir
El algoritmo se repite continuamente (hasta que el usuario apague el
sistema)
Ahora debemos refinar este algoritmo para expresarlo en términos de
las variables del sistema
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 34
UNIVERSIDAD
DE CANTABRIA
Ejemplo (cont.)
Algoritmo refinado
repetir continuamente lo siguiente
si tempAmbiente<tempDeseada-0.5 entonces
// hace frío
estadoRadiador:=encendido
fin si
si tempAmbiente>tempDeseada+0.5 entonces
// hace calor
estadoRadiador:=apagado
fin si
esperar 1 minuto
fin repetir
Observar que si no hace ni frío ni calor el radiador se queda como estaba
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 35
UNIVERSIDAD
DE CANTABRIA
A observar
Hemos descrito el algoritmo mediante la técnica llamada pseudocódigo,
que tiene
• instrucciones de control presentes en todos los lenguajes
si condición entonces
hacer cosas
fin si
• obsérvese el uso del sangrado para determinar el ámbito de
aplicación de cada instrucción de control
• cálculos
• acciones expresadas sin el formalismo de los lenguajes
El propósito es que el pseudocódigo refinado sea sencillo, y
directamente traducible a código en cualquier lenguaje
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 36
UNIVERSIDAD
DE CANTABRIA
1.5. Concepto de clase y objeto
Los programas Java se construyen mediante clases
Una clase representa una definición de un módulo de programa
• Define datos (atributos)
• y define algoritmos (métodos)
Objetos:
• A partir de la clase se pueden crear muchos objetos
• Cada uno de ellos se dice que es una instancia de la clase
• Cada uno contiene:
- atributos: los definidos en la clase, pero con valores concretos
- métodos: los definidos en la clase
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 37
UNIVERSIDAD
DE CANTABRIA
Diferencia entre clase y objeto
En la clase se definen las características comunes de un conjunto de
objetos
Define las características
de todos los elefantes
Elefante
Un animal, mamífero, con trompa,
tamaño grande, suele tener
colmillos, peso grande,
Clase
fecha de nacimiento,...
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 38
UNIVERSIDAD
DE CANTABRIA
Diferencia entre clase y objeto
Las instancias de una clase son objetos concretos que tienen las
características de la clase y valores concretos de sus datos
Cristina
Elefante nacido en Cabárceno
el 19 de junio de 2006
Objetos
pesó 95 Kg al nacer,...
Rose-Tu
Elefante nacido en el Zoo de
Oregón el 27 de agosto de 2008
pesó 129 Kg al nacer,...
Clase
<<instancia de>><<instancia de>>
Elefante
Un animal, mamífero, con trompa,
tamaño grande, suele tener
colmillos, peso grande,
fecha de nacimiento,...
ImágenesdeCreativeCommonsporJulielangfordySuperjew
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 39
UNIVERSIDAD
DE CANTABRIA
Concepto de clase y objeto
Un objeto es un elemento de programa que se caracteriza por:
• atributos: son datos contenidos en el objeto, y que determinan su
estado
• operaciones o métodos: son acciones con las que podemos
solicitar información del objeto, o modificarla
- Están compuestas por secuencias de instrucciones que operan con los
atributos
- y pueden invocar operaciones de otros objetos
Ambos, atributos y métodos, se llaman miembros, y se definen en la
clase
Se intenta siempre corresponder los objetos de un programa con
objetos del problema que éste resuelve
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 40
UNIVERSIDAD
DE CANTABRIA
Ejemplo, círculo que pintamos en una
pantalla
Los círculos se representan con una clase de objetos, y cada objeto es
un círculo concreto
• Atributos del círculo:
- el radio
- las coordenadas (X,Y) del centro
- el color
• Operaciones a realizar con el círculo:
- crear un círculo nuevo
- pintar el círculo
- cambiar el color
- cambiar el radio
- cambiar las coordenadas del centro
- obtener el radio o el área
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 41
UNIVERSIDAD
DE CANTABRIA
1.6. Diagrama de Clases
Define
• nombre de la clase
• atributos: nombres y tipos
• métodos: nombre, parámetros
(con nombre y tipo de cada uno), y
valor retornado (tipo)
- pueden ser constructores, que
inicializan el objeto y se llaman
como la clase
Circulo
-real centroX
+Circulo(real x, real y
-real centroY
-real radio
real r, Color col)
+cambiaRadio(real r)
+cambiaCentro(real x, real y)
+cambiaColor(Color col)
+real radio()
+real area()
+dibuja()
-Color col
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 42
UNIVERSIDAD
DE CANTABRIA
1.7. Estructura de un programa
Un programa java es un conjunto de clases, donde una de ellas es
especial en dos aspectos
• contiene una operación llamada main
• habitualmente no se crean objetos de esta clase
- el sistema operativo invoca el método main al ejecutar el programa
Clase 1 Clase 2 Clase 3 Clase 4
Clase principal
main
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 43
UNIVERSIDAD
DE CANTABRIA
Estructura de una clase
El caso más sencillo es el de un programa con una sola clase, que tiene
esta estructura:
import clases_importadas;
public class Nombre {
atributos
operaciones
}
Las clases importadas son aquellas pertenecientes a paquetes externos
• un paquete es una colección de clases
En una clase principal, una de las operaciones se llama main
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 44
UNIVERSIDAD
DE CANTABRIA
1.8. Estructura de un método
Las operaciones o métodos (como main) tienen la siguiente estructura:
descriptores valor_retornado nombre (argumentos)
{
declaraciones;
instrucciones;
}
Las declaraciones declaran datos (variables o constantes), clases y
objetos que se van a usar en las instrucciones
Las instrucciones representan cálculos que se hacen con esos datos.
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 45
UNIVERSIDAD
DE CANTABRIA
Ejemplo de programa
Por ejemplo, el siguiente programa pone un mensaje en la pantalla:
/**
* Programa que pone un mensaje en pantalla
*/
public class Hola {
/**
* Este es el método principal
*/
public static void main(String[] args) {
// No hay declaraciones
System.out.println("Hola, Que tal estás?");
}
}
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 46
UNIVERSIDAD
DE CANTABRIA
Explicación:
• public: el método se puede usar desde fuera
• static: el método pertenece a la clase (no a los objetos de la clase)
• void: no retorna nada
• String[] args: es el argumento, datos que se pasan a la
operación
• System: es una clase predefinida que representa al computador
• out: es un objeto de la clase System, predefinido: representa la
pantalla
• println: método para poner un texto en la pantalla
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 47
UNIVERSIDAD
DE CANTABRIA
Algunos comentarios
• formato libre
• sangrado: margen del texto, que se usa para remarcar la estructura
del programa
• comentarios de documentación
- multilínea, con principio y final (/** */)
- recomendable para todas las clases, métodos y atributos públicos
• comentarios internos
- multilínea, con principio y final (/* */)
- hasta fin de línea (//)
• uso de ";" para finalizar declaraciones e instrucciones
• uso de {} para definir los contenidos de clases y métodos
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 48
UNIVERSIDAD
DE CANTABRIA
Algunos comentarios
• nombre de la clase: primera letra con mayúscula y demás
minúsculas, excepto inicios de palabra
• las declaraciones e instrucciones pueden mezclarse en cualquier
orden
- pero es habitual poner primero las declaraciones, y luego las
instrucciones

Más contenido relacionado

PDF
Evolución lenguajes de programacón
DOCX
1.1. historia del lenguaje de programacion
DOCX
Lenguajes de programación
PDF
Lenguajes de alto_nivel
PDF
Historia Lenguajes y sus Tipos
PDF
Evolución y clasificación de los lenguajes de programación
PPT
Lenguajes De Programacion
PDF
Linea del tiempo
Evolución lenguajes de programacón
1.1. historia del lenguaje de programacion
Lenguajes de programación
Lenguajes de alto_nivel
Historia Lenguajes y sus Tipos
Evolución y clasificación de los lenguajes de programación
Lenguajes De Programacion
Linea del tiempo

La actualidad más candente (19)

PPTX
Cronologia de los Lenguajes de Programación
PPT
Historia Y EvolucióN De Los Lenguajes De ProgramacióN
 
DOCX
Lenguajes de Programación
PPTX
Lenguaje de programacion presentacion.
DOCX
Evolucion historica del lenguaje de programacion
PPTX
Lenguajes de programación
PDF
01. lenguajes de programación autor virtuniversidad
PDF
Programacion objetos
PPT
Historia de los Lenguajes de Programación
PPTX
Lenguajes de programación.ppt
PPTX
Tema 01 introducción a compiladores
PPTX
Clase lenguaje de programacion
PDF
El estudio de los lenguajes de programacion
PPTX
Lenguajes De Programación
PPTX
Exposición de Lenguajes de Programación
PPTX
Lemguaje de programacion angel matin exp 2011147162 ci 20101171
PPTX
Historia de los lenguajes de programación
PPTX
01 historia-de-la-programacic3b3n
PPTX
Clasificasion de los lenguajes
Cronologia de los Lenguajes de Programación
Historia Y EvolucióN De Los Lenguajes De ProgramacióN
 
Lenguajes de Programación
Lenguaje de programacion presentacion.
Evolucion historica del lenguaje de programacion
Lenguajes de programación
01. lenguajes de programación autor virtuniversidad
Programacion objetos
Historia de los Lenguajes de Programación
Lenguajes de programación.ppt
Tema 01 introducción a compiladores
Clase lenguaje de programacion
El estudio de los lenguajes de programacion
Lenguajes De Programación
Exposición de Lenguajes de Programación
Lemguaje de programacion angel matin exp 2011147162 ci 20101171
Historia de los lenguajes de programación
01 historia-de-la-programacic3b3n
Clasificasion de los lenguajes
Publicidad

Similar a Cap1 intro (20)

PDF
Evolucion de los lenguajes de programación
PDF
Deber
PPT
Lenguajes programación (TIC)
PPTX
Historia de la programacion
PPTX
Tipos y caracteristicas de lenguajes de programacion. ( adolfo elias).
PPTX
Clases/Tipos de lenguajes de programación
PPTX
Programación
DOCX
Los lenguajes de programación son herramientas que nos permiten crear program...
PPT
Lenguajes de programacion.
PPT
Lenguajes de programacion.
PPTX
Aplicacion de c
PPTX
Lenguaje de programacion
DOC
Capítulo 0 Qbasic generalidades
DOCX
LENGUAJES DE PROGRAMACION
PPTX
Lenguajes de programación
PPTX
Lenguajes de programación
PPTX
introduccion lenguajes de_programacion.pptx
PPTX
Lenguajes de programación
DOCX
Cabrera ies 2011
PPTX
Universidad autónoma de chiapas
Evolucion de los lenguajes de programación
Deber
Lenguajes programación (TIC)
Historia de la programacion
Tipos y caracteristicas de lenguajes de programacion. ( adolfo elias).
Clases/Tipos de lenguajes de programación
Programación
Los lenguajes de programación son herramientas que nos permiten crear program...
Lenguajes de programacion.
Lenguajes de programacion.
Aplicacion de c
Lenguaje de programacion
Capítulo 0 Qbasic generalidades
LENGUAJES DE PROGRAMACION
Lenguajes de programación
Lenguajes de programación
introduccion lenguajes de_programacion.pptx
Lenguajes de programación
Cabrera ies 2011
Universidad autónoma de chiapas
Publicidad

Más de IsaacGmezOtero (10)

PDF
Cap9 excepciones
PDF
Cap8 herencia
PDF
Cap7 modularidad
PDF
Cap5 entrada-salida
PDF
Cap4 datos-compuestos
PDF
Cap3 algoritmos
PDF
Cap2 datos
PDF
Cap11 prueba
PDF
Cap10 ficheros
PDF
Cap6 clases
Cap9 excepciones
Cap8 herencia
Cap7 modularidad
Cap5 entrada-salida
Cap4 datos-compuestos
Cap3 algoritmos
Cap2 datos
Cap11 prueba
Cap10 ficheros
Cap6 clases

Último (20)

DOCX
PROYECTO MASCOTAS 3 AÑOS correcto. - para directora Janeth 1548.docx
DOCX
PLAN ANUAL DE EPT CONSTRUCCIÓN METÁLICA 2°.docx
PPTX
SISTEMA DE LUBRICACION DEL MOTOR DE COMBUSTION
PPTX
MARINERIA II UA I.pptx333333333333333333
PPT
transformadores-monofasicos-y transformador-ppt.ppt
PDF
Manual Usuario Automovil Volkswagen Taos 2023
PPTX
BANDA DE BLOQUEO DE LA CAJA AUTOMATICA..pptx
PDF
señal accidente de trafico, nueva normativa
PPTX
BATERIA HV.pptxhgjjhgcxgjjhhgggggggfffhhjb
PPTX
Clases gestión financiera y gestión de clientes.pptx
PPTX
BANDA DE BLOQUEO DE LA CAJA AUTOMATICA..pptx
DOCX
Comprendiendo la Tecnología de Láser de Fibra.docx
PPTX
Análisis_Protocolo_3_Violencia_Psicologica.pptx
PPTX
RESISTENCIAS Y SEMICONDUCTORES electronica.pptx
PPTX
SUSTANCIAS REGULADAS POR EL PROTOCOLO DE MONTREAL.pptx
PPT
lucha_riesgos.ppt salud ocupacional riesgos
PDF
MYP-PETS-PP-NCL-08 CAMBIO DE ROTORES Y ESTATORES, LOWER SHAFT (1).pdf
PPT
Autotrónica 2 - clase 4 - CMP - CKP .ppt
PPTX
MOTORES DE COMBUSTION INTERNA CICLO OTTO.pptx
PDF
Juana de La magia en la Isl fz un gorlajdns idndjdnd
PROYECTO MASCOTAS 3 AÑOS correcto. - para directora Janeth 1548.docx
PLAN ANUAL DE EPT CONSTRUCCIÓN METÁLICA 2°.docx
SISTEMA DE LUBRICACION DEL MOTOR DE COMBUSTION
MARINERIA II UA I.pptx333333333333333333
transformadores-monofasicos-y transformador-ppt.ppt
Manual Usuario Automovil Volkswagen Taos 2023
BANDA DE BLOQUEO DE LA CAJA AUTOMATICA..pptx
señal accidente de trafico, nueva normativa
BATERIA HV.pptxhgjjhgcxgjjhhgggggggfffhhjb
Clases gestión financiera y gestión de clientes.pptx
BANDA DE BLOQUEO DE LA CAJA AUTOMATICA..pptx
Comprendiendo la Tecnología de Láser de Fibra.docx
Análisis_Protocolo_3_Violencia_Psicologica.pptx
RESISTENCIAS Y SEMICONDUCTORES electronica.pptx
SUSTANCIAS REGULADAS POR EL PROTOCOLO DE MONTREAL.pptx
lucha_riesgos.ppt salud ocupacional riesgos
MYP-PETS-PP-NCL-08 CAMBIO DE ROTORES Y ESTATORES, LOWER SHAFT (1).pdf
Autotrónica 2 - clase 4 - CMP - CKP .ppt
MOTORES DE COMBUSTION INTERNA CICLO OTTO.pptx
Juana de La magia en la Isl fz un gorlajdns idndjdnd

Cap1 intro

  • 1. Tema  1.  Introducción  a  los  lenguajes  de  programación   Programación  en  Lenguaje  Java   Michael  González  Harbour   Mario  Aldea  Rivas   Departamento  de  Matemá.cas,   Estadís.ca  y  Computación   Este  tema  se  publica  bajo  Licencia:   Crea.ve  Commons  BY-­‐NC-­‐SA  4.0  
  • 2. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 1 UNIVERSIDAD DE CANTABRIA Programación en Java 1. Introducción a los lenguajes de programación • Lenguajes de alto nivel. El proceso de compilación. El ciclo de vida del software. Concepto de algoritmo. Concepto de clase y objeto. Diagramas de clases. Estructura de un programa. Estructura de un método. 2. Datos y expresiones 3. Estructuras algorítmicas 4. Datos Compuestos 5. Entrada/salida 6. Clases, referencias y objetos 7. Modularidad y abstracción 8. Herencia y polimorfismo 9. Tratamiento de errores 10 ..., 11 ...
  • 3. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 2 UNIVERSIDAD DE CANTABRIA 1.1. Lenguajes de programación Las instrucciones de un programa son códigos numéricos almacenados en la memoria del computador Ejemplo de lenguaje máquina para el microprocesador 68000: suma de dos enteros: Dirección Código Binario Código Ensamblador Alto Nivel $1000 0011101000111000 MOVE.W $1200,D5 Z=X+Y $1002 0001001000000000 $1004 1101101001111000 ADD.W $1202,D5 $1006 0001001000000010 $1008 0011000111000101 MOVE.W $D5,$1204 $100A 0001001000000100
  • 4. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 3 UNIVERSIDAD DE CANTABRIA Programación del computador La programación mediante códigos numéricos se conoce como lenguaje máquina • es muy compleja Por ello se necesitan lenguajes de programación más cercanos a los programadores
  • 5. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 4 UNIVERSIDAD DE CANTABRIA Lenguajes de alto y bajo nivel Necesitamos escribir programas en un lenguaje más cómodo para los humanos • lenguaje de bajo nivel o ensamblador - cada instrucción corresponde a una instrucción de lenguaje máquina - es dependiente de la máquina - teóricamente más eficientes • lenguajes de alto nivel - instrucciones más abstractas y avanzadas - son lenguajes independientes de la máquina - en la práctica, mucho más productivos
  • 6. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 5 UNIVERSIDAD DE CANTABRIA Notas: Para hacer accesible la programación de un computador a cualquier persona, existen lenguajes de programación que tienen como función presentar al usuario el computador de acuerdo con un modelo abstracto (informático) sencillo e independiente de su estructura electrónica interna: Los lenguajes tienen dos categorías • Lenguaje ensamblador o de bajo nivel. Cada instrucción de lenguaje ensamblador se corresponde con una instrucción de lenguaje máquina, pero en lugar de codificarse mediante números se codifica mediante símbolos alfanuméricos, más fáciles de recordar. En teoría se puede conseguir más eficiencia, pues podemos usar toda la potencia ofrecida por la máquina. En la práctica, programar en lenguaje ensamblador es tedioso, difícil, con mucha facilidad para cometer errores y, por tanto, poco productivo • Lenguajes de alto nivel. Permiten programar utilizando un lenguaje más próximo al humano, e independiente de la máquina. Ejemplos de este tipo de lenguajes son el Java, FORTRAN, C, BASIC, Pascal, Ada, etc. Los lenguajes de alto nivel producen un código un poco menos eficiente que el ensamblador, pero más sencillo de escribir y mantener, con menos errores, y mucho más productivo.
  • 7. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 6 UNIVERSIDAD DE CANTABRIA Traductores: ensambladores, compiladores e intérpretes Son programas que traducen un programa de aplicación escrito en un lenguaje de programación, a un programa en lenguaje máquina: • lenguaje ensamblador: se traduce mediante un programa ensamblador • lenguajes de alto nivel: se traducen mediante compiladores e intérpretes - los compiladores traducen el programa de aplicación antes de que éste se ejecute - los intérpretes van traduciendo el programa de aplicación a medida que se va ejecutando
  • 8. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 7 UNIVERSIDAD DE CANTABRIA Notas: El vendedor de un computador, acompaña el equipo físico con un conjunto de programas de ayuda, desarrollados por él o por personas especializadas, que tienen como función presentar al usuario el computador de acuerdo con un modelo abstracto (informático) sencillo e independiente de su estructura electrónica interna: • ensambladores, compiladores e intérpretes • sistema operativo • entorno de desarrollo y algunos programas de aplicación Los ensambladores, compiladores e intérpretes traducen un programa escrito en un lenguaje más o menos cómodo para el usuario, a lenguaje máquina. Según el lenguaje utilizado, las herramientas son: • Lenguajes de bajo nivel: se utiliza un programa ensamblador, que traduce los símbolos alfanuméricos a código máquina, por medio de algoritmos muy simples. • Lenguajes de alto nivel. La traducción a lenguaje máquina se hace mediante compiladores (que traducen el programa escrito en lenguaje de alto nivel de forma completa antes de su ejecución) e intérpretes (que traducen cada instrucción mientras se ejecuta el programa). Los intérpretes son más lentos en la ejecución, ya que tienen que hacer el trabajo de traducción cada vez que se ejecuta el programa. Hoy en día es más habitual usar compiladores. Los lenguajes de programación de alto nivel han sido definidos como una solución intermedia entre los lenguajes naturales humanos y los lenguajes máquina de los computadores. Están bien definidos, en el sentido de que la tarea que se puede expresar con ellos no es ambigua y por lo tanto pueden ser traducidos en un programa máquina concreto, de forma automatizada y por el propio (aunque no necesariamente) computador que va a realizar la tarea.
  • 9. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 8 UNIVERSIDAD DE CANTABRIA Ejemplos de lenguajes de alto nivel Los inicios: • Fortran: 1956, para cálculo científico - estándares: 1966, 1977, 1990, 1997, 2003, 2008 • Cobol: 1960, para aplicaciones de gestión - estándar actual: 2002 • Lisp: 1959, para inteligencia artificial - estandarizado por ANSI en 1994 (common LISP) - estandarizado por ISO en 1997, actualizado en 2007 (ISLISP) • Basic: 1964, para docencia, interpretado - Visual Basic - Visual Studio 2012 (Microsoft)
  • 10. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 9 UNIVERSIDAD DE CANTABRIA Notas: Existen muchos lenguajes de alto nivel de propósito general, sus principales diferencias se encuentran en que poseen un conjunto de órdenes mas adecuado para expresar tareas de un tipo concreto de problema o porque corresponden a distintos niveles de evolución de los computadores: FORTRAN (FORmula TRANslation). Su nombre evidencia la orientación matemática de uno de los lenguajes de alto nivel mas antiguos, que aún perduran. J. Backus lo desarrolló en 1956. Aunque ha perdido terreno frente a los lenguajes mas modernos, todavía es ampliamente utilizado en aplicaciones científicas de grandes cálculos numéricos, porque probablemente, es el lenguaje con mayor número de librerías, desarrolladas y comprobadas por mucha gente, a lo largo de su historia. COBOL (COmmon Business Oriented Language). Se trata del lenguaje que ha alcanzado una mayor resonancia en las tareas de gestión. Su desarrollo fue promovido por el Departamento de Defensa de Los EEUU, en 1960. El lenguaje ha sufrido muchas extensiones, y ha sido actualizado recientemente. LISP (LISt Processing). El Massachusetts Institute of Technology creó, en 1959, este lenguaje de alto nivel orientado a aplicaciones de inteligencia artificial. La programación de procesos recurrentes (edificados sobre datos procesados en los pasos anteriores) es uno de los puntos fuertes del LISP. BASIC (Beginners All-purpose Symbolic Instruction Code). Nació entre 1964 y 1965 en el Dartmouth College como una herramienta para la enseñanza. Con el tiempo han ido proliferando los dialectos y versiones, hasta el punto de que es raro el fabricante que no desarrolla un dialecto para sus propios equipos. Fue muy popular por su sencillez, pero tiene carencias importantes.
  • 11. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 10 UNIVERSIDAD DE CANTABRIA Ejemplos de lenguajes (cont.) Hacia la programación estructurada: • Pascal: 1969, para docencia, programación estructurada • C: 1972, para programación del software del sistema - estandarizado en 1990, 1999, y 2011 • Ada: 1983, para sistemas de alta integridad, incluyendo sistemas de tiempo real - estandarizado en 1983
  • 12. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 11 UNIVERSIDAD DE CANTABRIA Notas: PASCAL (En honor del matemático francés Blaise Pascal). Es un lenguaje de programación desarrollado por el profesor Nicklaus Wirth, en 1969, en el Instituto Federal de Tecnología de Zurich partiendo de los fundamentos del ALGOL. Fue uno de los primeros lenguaje que incorporaron los conceptos de programación estructurada. Aunque fue muy popular, la dificultad para partir el programa en módulos y la falta de estandarización han hecho decaer su uso. C. Es un lenguaje de programación desarrollado por la Bell Laboratories, en principio para trabajar con el sistema operativo UNIX. Quizás por ello, la popularidad del 'C' es muy alta. Es un lenguaje que, al mismo tiempo que permite una programación en alto nivel, permite una gran aproximación a la máquina. Muchos lo consideran un lenguaje intermedio entre alto y bajo nivel. Como estos últimos, presenta alta eficiencia y escasa fiabilidad. Es fácil cometer errores en C.
  • 13. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 12 UNIVERSIDAD DE CANTABRIA Ejemplos de lenguajes (cont.) Lenguajes de programación orientada a objetos: • Smaltalk: 1980, para programación orientada a objetos - estandarizado en 1998 • C++: 1987, extensión mejorada del C que incorpora programación orientada a objetos - estandarizado en 1998, estandarizado de nuevo en 2011 • Java: 1995, para programación orientada a objetos en sistemas distribuidos (red Internet) - versión actual: Java 7 (2011) - ofrecido como software libre en 2007 • Ada 95, Ada 2005, Ada 2012: versiones mejoradas del anterior, incluyendo programación orientada a objetos - estandarizado en 1995, 2005 y 2012
  • 14. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 13 UNIVERSIDAD DE CANTABRIA Notas: SMALTALK: Lenguaje de programación orientada a objetos puro. Es muy ineficiente con respecto a lenguajes procedurales como el C o el Ada, pero es cómodo de usar y de programar en él. JAVA: Lenguaje derivado del C en cuanto a sintaxis, pero más parecido al Ada 95 en cuanto a las comprobaciones que hace el compilador y soporte de la programación concurrente. Está pensado para su ejecución en sistemas distribuidos (internet). Existe un código intermedio, bien definido, que puede intercambiarse entre computadores diferentes para luego ser traducido y ejecutado. C++: Extensión del lenguaje C que mejora algunos de sus inconvenientes, y añade construcciones de programación orientada a objetos. Entre las mejoras destacan una mayor comprobación de los tipos de datos por parte del compilador, las excepciones, y las plantillas genéricas. ADA (En honor de Lady Augusta ADA Byron). El ADA es un lenguaje inspirado en el PASCAL, que fue promovido por el Departamento de Defensa de Los EEUU. El objetivo de su desarrollo era conseguir un lenguaje con posibilidades de convertirse en un estándar universal y que facilitara la ingeniería de software y el mantenimiento de los programas. Entre sus campos de aplicación se incluyen los sistemas de tiempo real y los sistemas de alta integridad. El 1995 se revisó el lenguaje para mejorarlo y para añadirle construcciones de programación orientada al objeto. En 2005 se finalizó una nueva versión y en 2012 se está completando una nueva.
  • 15. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 14 UNIVERSIDAD DE CANTABRIA Ejemplos de lenguajes (cont.) Otros lenguajes de programación: • C# (C sharp): orientado a objetos y orientado a componentes; sintaxis basada en C++ - introducido por Microsoft en 2000, estandarizado por ISO en 2003 y 2006 (versión 2.0) - versión actual: 5.0 (2012) • Objective-C: es un superconjunto de C al que se añade la programación orientada a objetos de Smalltalk - se utiliza como lenguaje de programación principal de Apple para OS X e iOS - versión actual: 2.0 (2007)
  • 16. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 15 UNIVERSIDAD DE CANTABRIA Ejemplos de lenguajes (cont.) Lenguajes de guiones o “scripts”: • PHP: desarrollado para hacer páginas Web dinámicas, soportado por la mayoría de servidores Web - desarrollado en 1995, versión actual 5.5 (2013) • Perl: interpretado, con tipos dinámicos, no es orientado a objetos. Tiene facilidades de manipulación de textos - desarrollado en 1987, versión actual 5.16 (2012) • Python: habitualmente interpretado, orientado a objetos, con tipos dinámicos; hace énfasis en la legibilidad - es de finales de los 80; versión actual 3.3 (2013)
  • 17. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 16 UNIVERSIDAD DE CANTABRIA Ejemplos de lenguajes (cont.) Lenguajes de guiones o “scripts” (continuación): • JavaScript: interpretado, orientado a objetos, soportado por muchos navegadores Web. Sintaxis inspirada en Java - creado en 1995, propiedad de Oracle; versión actual 1.8.5 (2011) - estandarizado en 1997 como ECMAScript; versión actual 5.1 (2011) • Ruby: Lenguaje de “scripts”, interpretado, orientado a objetos, con tipos dinámicos. Sintaxis inspirada en Perl y Smalltalk - creado en 1993, no estandarizado - versión actual 2.0.0 (2013)
  • 18. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 17 UNIVERSIDAD DE CANTABRIA Notas: Un lenguaje de “scripts” o de guiones es un lenguaje de programación para controlar la ejecución de otras aplicaciones. Suelen ser interpretados. Tienen mucho éxito para programar aplicaciones web. Un lenguaje con tipos dinámicos es aquel en el que la comprobación del tipo de dato que se está utilizando se hace durante la ejecución, en lugar de hacerse de manera estática durante la compilación.
  • 19. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 18 UNIVERSIDAD DE CANTABRIA Ránking de lenguajes de programación
  • 20. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 19 UNIVERSIDAD DE CANTABRIA Notas: Fuente: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html Fecha: Sep 2015
  • 21. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 20 UNIVERSIDAD DE CANTABRIA El lenguaje Java Desarrollado por la empresa Sun Microsystems (ahora Oracle) en 1995 Recibe una amplia aceptación Objetivos generales: • WORA: (Write Once, Run Anywhere) • Portabilidad sin necesidad de recompilar • Programación distribuida • Orientado a objetos - abstracción de datos - modularidad, encapsulado, y ocultamiento de información - herencia y polimorfismo
  • 22. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 21 UNIVERSIDAD DE CANTABRIA El lenguaje Java (cont.) Objetivos generales (cont.): • Más fiable y seguro que C o C++: - memoria dinámica automática, que evita los punteros explícitos - tipificación estricta - comprobación automática de tamaños de variables • Sintaxis similar a la del C/C++ • Concurrencia integrada en el lenguaje • Excepciones declaradas • Interfaz gráfica integrada en el lenguaje La versión actual es la 1.8 (Java 8)
  • 23. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 22 UNIVERSIDAD DE CANTABRIA 1.2. El proceso de compilación Ficheros de código fuente Editor de texto Preprocesador Ficheros de código objeto 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 Librerías Enlazador 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 Programa Ejecutable “Front-end” “Back-end” Ensamblador Código fuente final Código intermedio Código ensamblador Código objeto Compilador
  • 24. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 23 UNIVERSIDAD DE CANTABRIA Notas: Un compilador puede definirse como una herramienta automática de traducción que lee un programa escrito en un lenguaje (el lenguaje fuente) y lo traduce a un programa equivalente en otro lenguaje (el lenguaje objeto). En el proceso de traducción el compilador notifica al usuario de la presencia de errores en el programa fuente. La variedad de compiladores que pueden aparecer es muy alta. Existen miles de lenguajes fuente. Igualmente ocurre con los lenguajes objeto: pueden ser otros lenguajes de programación, o el lenguaje máquina de cualquier computador entre un microprocesador o un supercomputador. En cualquier caso las tareas que debe realizar son las mismas. Además del compilador también son necesarios otros programas para crear un programa ejecutable: el preprocesador, el ensamblador, el enlazador, y el cargador. En la figura de arriba se muestra un proceso de compilación típico.
  • 25. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 24 UNIVERSIDAD DE CANTABRIA Compilación para máquina virtual Ficheros de código fuente Editor de texto Preprocesador Ficheros con “clases” 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 010010101010101010000010101000101010101010101010 Librerías Intérprete “Front-end” “Back-end” Código fuente final Código intermedio Código de Máquina Compilador Virtual Nativas Cargador Dinámico de Clases Máquina Virtual
  • 26. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 25 UNIVERSIDAD DE CANTABRIA Notas: La arquitectura del entorno de ejecución de programas Java se basa en una máquina virtual, que se ejecuta en el computador para interpretar las instrucciones del programa del usuario descritas en un código intermedio especial, llamado código de máquina virtual Java (el Java Byte Code). La idea principal de esta arquitectura es la de “Escribir una vez, ejecutar en cualquier sitio”. El compilador de Java no genera código máquina de un computador concreto, sino un código especial, que luego es interpretado por otro programa, llamado máquina virtual, que existe en cada computador en el que se desea ejecutar el programa Java. De este modo, un programa Java se puede ejecutar indistintamente en cualquier computador que disponga de esa máquina virtual, sin necesidad de recompilarlo. Adicionalmente, en la arquitectura Java los programas no se enlazan antes de su ejecución, sino que se utiliza un enlazado dinámico. Cuando se hace una llamada a una operación de un módulo (clase) que no está cargado en la máquina virtual, ésta se encarga de buscar ese módulo y cargarlo en ese momento en la máquina virtual. Desde el programa del usuario se pueden utilizar operaciones “nativas”, suministradas por la máquina virtual, escritas generalmente en código máquina, y que pueden acceder a los dispositivos hardware del computador. El resultado es: programas muy portables, muy dinámicos, aunque poco eficientes.
  • 27. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 26 UNIVERSIDAD DE CANTABRIA 1.3. El ciclo de vida del software Codificación Pruebas Requisitos Análisis de Requisitos Informales Documento de Análisis de Especificaciones Requisitos Documento de Especificaciones Diseño de la Arquitectura Diseño Detallado Arquitectura del Programa Diseño de cada Módulo Módulos de Programa de Unidad Pruebas de Integración Pruebas de Sistema Pruebas de Aceptación Ciclo en V
  • 28. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 27 UNIVERSIDAD DE CANTABRIA Notas: Los pasos que se siguen generalmente a la hora de desarrollar un programa son los siguientes: • Análisis de requisitos: Se define el problema a resolver y todos los objetivos que se pretenden, pero sin indicar la forma en la que se resuelve. • Especificación: Se determina la forma en la que se resolverá el problema, pero sin entrar aún en su implementación informática. Se determina asimismo la interfaz con el usuario. • Diseño de la arquitectura del programa: Se divide el problema en módulos, se especifica lo que hace cada módulo, así como las interfaces de cada uno de ellos. • Diseño detallado de los módulos: Para cada módulo se diseñan detalladamente las estructuras de datos y los algoritmos a emplear. • Codificación: Se escribe el programa en el lenguaje de programación elegido. • Pruebas de módulos: Se prueban los módulos del programa aisladamente y se corrigen los fallos hasta conseguir un funcionamiento correcto. • Integración y Prueba de sistema: Se unen todos los módulos, y se prueba el funcionamiento del programa completo. • Prueba de aceptación: Instalación en el lugar definitivo y aceptación por parte del cliente
  • 29. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 28 UNIVERSIDAD DE CANTABRIA Distribución del Esfuerzo de desarrollo análisis y diseño codificación pruebas e integración
  • 30. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 29 UNIVERSIDAD DE CANTABRIA Coste de los sistemas informáticos Los errores software tienen un alto coste: efecto y corrección 0 2.5 6.3 16 40 100 Ana Dis Cod Int Pru Man Costerelativodecorregirunerror Etapa en que se detecta el error
  • 31. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 30 UNIVERSIDAD DE CANTABRIA Coste de los sistemas informáticos Relación entre el coste de HW y SW 0 20 40 60 80 100 1955 1970 1995 Hardware Software %delcostetotal Año
  • 32. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 31 UNIVERSIDAD DE CANTABRIA 1.4. Concepto de algoritmo Un algoritmo es: • una secuencia finita de instrucciones, • cada una de ellas con un claro significado, • que puede ser realizada con un esfuerzo finito • y en un tiempo finito El algoritmo se diseña en la etapa de diseño detallado y se corresponde habitualmente con el nivel de operación o método Los programas se componen habitualmente de muchas clases que contienen algoritmos, junto con datos utilizados por ellos • los datos y algoritmos relacionados entre sí se encapsulan en la misma clase
  • 33. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 32 UNIVERSIDAD DE CANTABRIA Ejemplo de algoritmo Programa que intenta mantener una habitación a una temperatura deseada (± 0.5 grados) • dispone de un radiador que se puede encender y apagar, • y un termómetro Variables: • tempDeseada: magnitud real (ºC) • tempAmbiente: magnitud real (ºC) • estadoRadiador: encendido o apagado Estado del programa: • valor de tempDeseada, tempAmbiente, y estadoRadiador en cada instante
  • 34. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 33 UNIVERSIDAD DE CANTABRIA Ejemplo (cont.) Algoritmo repetir continuamente lo siguiente si hace frío encender el radiador si hace calor apagar el radiador esperar un rato fin repetir El algoritmo se repite continuamente (hasta que el usuario apague el sistema) Ahora debemos refinar este algoritmo para expresarlo en términos de las variables del sistema
  • 35. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 34 UNIVERSIDAD DE CANTABRIA Ejemplo (cont.) Algoritmo refinado repetir continuamente lo siguiente si tempAmbiente<tempDeseada-0.5 entonces // hace frío estadoRadiador:=encendido fin si si tempAmbiente>tempDeseada+0.5 entonces // hace calor estadoRadiador:=apagado fin si esperar 1 minuto fin repetir Observar que si no hace ni frío ni calor el radiador se queda como estaba
  • 36. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 35 UNIVERSIDAD DE CANTABRIA A observar Hemos descrito el algoritmo mediante la técnica llamada pseudocódigo, que tiene • instrucciones de control presentes en todos los lenguajes si condición entonces hacer cosas fin si • obsérvese el uso del sangrado para determinar el ámbito de aplicación de cada instrucción de control • cálculos • acciones expresadas sin el formalismo de los lenguajes El propósito es que el pseudocódigo refinado sea sencillo, y directamente traducible a código en cualquier lenguaje
  • 37. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 36 UNIVERSIDAD DE CANTABRIA 1.5. Concepto de clase y objeto Los programas Java se construyen mediante clases Una clase representa una definición de un módulo de programa • Define datos (atributos) • y define algoritmos (métodos) Objetos: • A partir de la clase se pueden crear muchos objetos • Cada uno de ellos se dice que es una instancia de la clase • Cada uno contiene: - atributos: los definidos en la clase, pero con valores concretos - métodos: los definidos en la clase
  • 38. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 37 UNIVERSIDAD DE CANTABRIA Diferencia entre clase y objeto En la clase se definen las características comunes de un conjunto de objetos Define las características de todos los elefantes Elefante Un animal, mamífero, con trompa, tamaño grande, suele tener colmillos, peso grande, Clase fecha de nacimiento,...
  • 39. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 38 UNIVERSIDAD DE CANTABRIA Diferencia entre clase y objeto Las instancias de una clase son objetos concretos que tienen las características de la clase y valores concretos de sus datos Cristina Elefante nacido en Cabárceno el 19 de junio de 2006 Objetos pesó 95 Kg al nacer,... Rose-Tu Elefante nacido en el Zoo de Oregón el 27 de agosto de 2008 pesó 129 Kg al nacer,... Clase <<instancia de>><<instancia de>> Elefante Un animal, mamífero, con trompa, tamaño grande, suele tener colmillos, peso grande, fecha de nacimiento,... ImágenesdeCreativeCommonsporJulielangfordySuperjew
  • 40. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 39 UNIVERSIDAD DE CANTABRIA Concepto de clase y objeto Un objeto es un elemento de programa que se caracteriza por: • atributos: son datos contenidos en el objeto, y que determinan su estado • operaciones o métodos: son acciones con las que podemos solicitar información del objeto, o modificarla - Están compuestas por secuencias de instrucciones que operan con los atributos - y pueden invocar operaciones de otros objetos Ambos, atributos y métodos, se llaman miembros, y se definen en la clase Se intenta siempre corresponder los objetos de un programa con objetos del problema que éste resuelve
  • 41. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 40 UNIVERSIDAD DE CANTABRIA Ejemplo, círculo que pintamos en una pantalla Los círculos se representan con una clase de objetos, y cada objeto es un círculo concreto • Atributos del círculo: - el radio - las coordenadas (X,Y) del centro - el color • Operaciones a realizar con el círculo: - crear un círculo nuevo - pintar el círculo - cambiar el color - cambiar el radio - cambiar las coordenadas del centro - obtener el radio o el área
  • 42. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 41 UNIVERSIDAD DE CANTABRIA 1.6. Diagrama de Clases Define • nombre de la clase • atributos: nombres y tipos • métodos: nombre, parámetros (con nombre y tipo de cada uno), y valor retornado (tipo) - pueden ser constructores, que inicializan el objeto y se llaman como la clase Circulo -real centroX +Circulo(real x, real y -real centroY -real radio real r, Color col) +cambiaRadio(real r) +cambiaCentro(real x, real y) +cambiaColor(Color col) +real radio() +real area() +dibuja() -Color col
  • 43. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 42 UNIVERSIDAD DE CANTABRIA 1.7. Estructura de un programa Un programa java es un conjunto de clases, donde una de ellas es especial en dos aspectos • contiene una operación llamada main • habitualmente no se crean objetos de esta clase - el sistema operativo invoca el método main al ejecutar el programa Clase 1 Clase 2 Clase 3 Clase 4 Clase principal main
  • 44. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 43 UNIVERSIDAD DE CANTABRIA Estructura de una clase El caso más sencillo es el de un programa con una sola clase, que tiene esta estructura: import clases_importadas; public class Nombre { atributos operaciones } Las clases importadas son aquellas pertenecientes a paquetes externos • un paquete es una colección de clases En una clase principal, una de las operaciones se llama main
  • 45. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 44 UNIVERSIDAD DE CANTABRIA 1.8. Estructura de un método Las operaciones o métodos (como main) tienen la siguiente estructura: descriptores valor_retornado nombre (argumentos) { declaraciones; instrucciones; } Las declaraciones declaran datos (variables o constantes), clases y objetos que se van a usar en las instrucciones Las instrucciones representan cálculos que se hacen con esos datos.
  • 46. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 45 UNIVERSIDAD DE CANTABRIA Ejemplo de programa Por ejemplo, el siguiente programa pone un mensaje en la pantalla: /** * Programa que pone un mensaje en pantalla */ public class Hola { /** * Este es el método principal */ public static void main(String[] args) { // No hay declaraciones System.out.println("Hola, Que tal estás?"); } }
  • 47. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 46 UNIVERSIDAD DE CANTABRIA Explicación: • public: el método se puede usar desde fuera • static: el método pertenece a la clase (no a los objetos de la clase) • void: no retorna nada • String[] args: es el argumento, datos que se pasan a la operación • System: es una clase predefinida que representa al computador • out: es un objeto de la clase System, predefinido: representa la pantalla • println: método para poner un texto en la pantalla
  • 48. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 47 UNIVERSIDAD DE CANTABRIA Algunos comentarios • formato libre • sangrado: margen del texto, que se usa para remarcar la estructura del programa • comentarios de documentación - multilínea, con principio y final (/** */) - recomendable para todas las clases, métodos y atributos públicos • comentarios internos - multilínea, con principio y final (/* */) - hasta fin de línea (//) • uso de ";" para finalizar declaraciones e instrucciones • uso de {} para definir los contenidos de clases y métodos
  • 49. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/mar/16 48 UNIVERSIDAD DE CANTABRIA Algunos comentarios • nombre de la clase: primera letra con mayúscula y demás minúsculas, excepto inicios de palabra • las declaraciones e instrucciones pueden mezclarse en cualquier orden - pero es habitual poner primero las declaraciones, y luego las instrucciones