tap día 1gtts.ehu.es/german/docencia/1213/tap/intro.pdf · basic perl php. la programación es y...
TRANSCRIPT
TAP día 113/09/2012
http://gtts.ehu.es/German
Sept.2012
El resto del curso seguirá el camino que se irá marcando a través de los tutoriales de Java en la web de Oracle
http://download.oracle.com/javase/tutorial/
1.- ¿Dónde esta Java en el universo del los lenguajes?...
Situando el lenguaje en diferentes aspectos a considerar antes de empezar
http://gtts.ehu.es/German
FORTRAN
PASCAL
COBOL
APLPYTHON
C
FORTH
TCL
C#
JAVASCRIPT
ADA
PROLOG
http://gtts.ehu.es/German
LISP
JAVA
RUBY
BASIC
PERL
PHP
La Programación ES y VIENE DE las Matemáticas… (como parte de la computación)
Del concepto de calculabilidad efectiva a una
Clasificación general de lenguajes
Lenguajes Alonzo
Church
Alan
Turing
CálculoCálculo LambdaLambdaMáquinaMáquina dede TuringTuring
Sin olvidar las
funciones
recursivas de
Herbrand-Gödel"
Euclides (Método axiomático), Aristóteles(Lógica formal), Muhammad ibn Musa Al’Khowarizmi (Algorítmo)…
HILBERT
http://gtts.ehu.es/German
Funcionales
•Lisp
•Scheme
•ML
•Hope
•CLOS
•...
Imperativos
•Fortran
•Cobol
•Pascal
•C
•...
Lógicos
•Prolog
•...O/B objetos
•Object Pascal
•C++
•Java
•...
Frameworks
•Ruby on Rails
•...
60
70
Fortran
Algol 68
Mesa
Algol 60
PascalSimula 67
CSP*
PascalConcurrente
Distributed
CPL*
BCPL
C
BASIC
sh, csh,ksh,..Prolog
Lisp
Scheme
ISWIM*
ML
A
B
http://gtts.ehu.es/German
80
90
Smalltalk-80Modula-2
Oberon
CSP* DistributedProcesses
AdaC++
JAVA
Visual BASIC
PERL TCL
Python
JavaScript
RExx
“C++ ++ --”
Standard ML
Common Lisp
CLOS
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
Ordenación de lenguajespor uso
http://gtts.ehu.es/German
ABC, AD, Algol, Alpha, Applescript, AspectJ, Beta, Boo, C shell, cg,
Ch, Clean, cT, Curl, Dylan, Eiffel, Factor, Felix, Focus, Icon, IDL,
Inform, Io, MAD, Magic, Maple, Mathematica, Modula-2, MOO,
MUMPS, Oberon, Occam, Oz, Pike, PILOT, Postscript, PowerBuilder,
Progress, Q, REALbasic, Rebol, S-lang, Scala, SIGNAL, SPSS, TOM,
VBScript, Verilog, VHDL, XSLT
A Java se le ha “acusado” desde un principio de ser LENTO.
•Al principio era cierto.
Relación 4/1 frente a C
Razón principal: lenguaje interpretado
Otras razones: recogida de basuras, mecanismos de seguridad, etc
•Desde hace unos años es comparable a C, dependiendo de en qué tareas. Ciertamente no es el mejor caso el del
cómputo intensivo (estimaciones de un estudio particular 2004).
•En gráficos bate a C
•Relación media: 1.4/1 frente a C si excluimos gráficos
•En cálculo intensivo la diferencia es más acusada
•Actualmente Java es más rápido que C en muchas tareas (particularmente gráficos) y similar en los peores casos
(cómputo intensivo)
•Máquina HotSpot
http://gtts.ehu.es/German
Tiempo de ejecución Java/C
3,483256098
1
10
100
0 2000 4000 6000 8000 10000
•Máquina HotSpot
•Java (los lenguajes sobre máquinas virtuales en general) serán los más rápidos en el futuro (ante cómputos complejos,
no para el caso de algoritmos muy “cerrados”)
Ejemplo peor caso Java vs. C (14ago08)
(cálculo de PI por MonteCarlo)
•La relación de tiempo de ejecución es del orden de 3,5 a favor de C
•La relación de tiempo de preparación del experimento a partir del código tomado de
http://husnusensoy.blogspot.com/2006/06/c-vs-java-in-number-crunching.html
ha sido del orden de 120 a favor de Java
•JAVA: copiar, pegar, compilar, ejecutar y listo en unos segundos.
•C: copiar pegar, compilar, corregir fuente, compilar, ejecutar, observar
falta de resolución de la función “time”, ir a la bibliografía para resolver el
tema, no encontrar solución, reescribir con itreraciones para obtener
tiempos mayores, compilar, resolver problemas de apuntadores, compilar,
ejecutar, resolver problemas de violación de segmentos, compilar, ejecutar
y listo en una hora a causa de las iteraciones en la búsqueda de precisión.
Falta de precisión en la medida de C
La máquina virtual.
"Write Once, Run Anywhere"
http://gtts.ehu.es/German
•Una idea novedosa, pero no del todo: cierta similitud con los lenguajes con código intermedio.
•Sí es novedoso el enfoque de emulador de máquina.
•Ventajas:
•se pueden incluir con facilidad técnicas que en un diseño hardware pueden resultar prohibitivas por su complejidad técnica,
•la posibilidad de evolución es mucho más sencilla al no requerir cambios de hardware
•permite utilizar las "plataformas" existentes sin implicar una ruptura con los sistemas actuales (existe la máquina real pero…).
• el diseño es público y la "implementación" es privada (especificaciones técnicas que debe complir toda JVM. ).
•Distintos comportamientos en términos de velocidad y uso de memoria
2. Desarrollo en Java.
Ideas globales y material necesario
http://gtts.ehu.es/German
Herramientas de desarrollo:
javac (compilador), java (máquina virtual), jdb (debugger),
javadoc (documentador), jar (compactador), javap
(desensamblador), extcheck (verificador de .jar), etc.
Java Runtime Environment.
Máquina virtual, Biblioteca de clases y todo lo necesario para
dar soporte a aplicaciones [compiladas] java.
Librerias adicionales para desarrollo.
Cabeceras para métodos nativos.
V+A
V+A
Instalando el JDK.
http://gtts.ehu.es/German
Con•el directorio “bin” en el PATH, y•la variable JAVA-HOME=<path de jdk1.6.0_07>
podemos desarrollar nuestro primer programa.
//
// Aplicación ejemplo "HolaMundo"
//
public class HolaMundo {
public static void main(String[] args) {
System.out.println("Hola, mundo");
}
} Prompt> javac HolaMundo.java
Prompt> java HolaMundo
Hola, Mundo
Prompt>
El “Manifest.mf” debe situarse en una
Uso de ficheros “Jar”
http://gtts.ehu.es/German
El “Manifest.mf” debe situarse en una
sub-carpeta denominada “meta-inf”
bin:Javadoc
La documentación del código desarrollado esta ligada al
mismo y se genera automáticamente mediante javadoc
http://gtts.ehu.es/German
Core Java 2 (Java1.3)
Contenido de C:\...\jdk1.3\jre\lib\rt.jar
jre/lib - biblioteca “rt”
http://gtts.ehu.es/German
2008: mucho más de lo mostrado aquí
http://java.sun.com/javase/6/docs/api/
Documentación de bibliotecas
http://gtts.ehu.es/German
Desensamblado y decompilación
C:>javap -c HolaMundo
Compiled from "HolaMundo.java"
public class HolaMundo extends java.lang.Object{
public HolaMundo();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;
3: ldc #3; //String Hola, mundo
5: invokevirtual #4; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
http://gtts.ehu.es/German
(Decompilación: probar con Jode y SAUTRELA)
“Ofuscacion”
5: invokevirtual #4; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
8: return
}
ECLIPSE (.org)
Comunidad de desarrollo en código abierto
Proyectos enfocados al desarrollo de una plataforma de marcos
extensibles, herramientas y ejecutables para construir, implantar
y gestionar software a lo largo de todo su ciclo de vida.
Un “vibrante” y “amplio” ecosistema de grandes fabricantes de
tecnología, innovadoras start-ups, universidades, instituciones de
investigación y particulares.
IDEs de ayuda al desarrollo
http://gtts.ehu.es/German
NETBEANS(.org)
Un IDE de código abierto gratis para desarrolladores de
software. Proporciona todas las herramientas para crear
aplicaciones profesionales de sobremesa, de empresa, web y
móviles, con Java, C/C++, y Ruby. NetBeans es fácil de
instalar y usar de inmediato, y corre en numerosas
plataformas incluyendo Windows, Linux, Mac OS X y Solaris.
Una defensa de Netbeans frente al resto.(desde el desconocimiento del resto)
- El slogan de Netbeans 6 es “The only IDE you need!”, y probablemente no sea sólo un slogan sino una verdad absoluta.
- El competidor más importante es Eclipse, aunque también están en el juego Jbuilder (Borland) y Java Studio (Creator/ Entrprise).
-Jbuilder fue importante hasta hace un par de años al destacar en varios aspectos (p.ej. integración de UML), pero los esquemas de desarrollo en comunidad de Netbeans y Eclipse lo han superado (sin dejar de ser un buen entorno)
- Java Studio es el IDE de SUN. Los padres de la tecnología Java han luchado siempre por liderar la oferta
IDEs de ayuda al desarrollo
http://gtts.ehu.es/German
tecnología Java han luchado siempre por liderar la oferta de entornos de desarrollo para Java con interesantes iniciativas y con dedicación de medios, pero su éxito ha sido más bien escaso. Su propia consciencia de este hecho les ha llevado, desde hace varios años, a apoyar Netbeans “oficialmente” (es el IDE descargable como “bundle” con el kit de desarrollo de la web de SUN) sin que hayan renunciado a su propio sistema (¿?)
- Eclipse puede ser comparable a Netbeans (¿superior?), pero su modelo de desarrollo es comercial, por lo que nos podemos encontrar con que una determinada capacidad que nos resulte interesante sea de pago (Actualmente no se exige el “ánimo” comercial y se sigue un esquema mixto)
-La comparación de netbeans.og frente a eclipse.org muestra netamente una mejor atención en la primera, así como la aplicación de las últimas técnicas web (Web 3.0)
Diag. de clasesDiag. de clasesDiag. de clasesDiag. de clases
Diag. de casos de usoDiag. de casos de usoDiag. de casos de usoDiag. de casos de uso
Desarrollo mediante modelado: UML
http://gtts.ehu.es/German
Diag. de secuenciaDiag. de secuenciaDiag. de secuenciaDiag. de secuencia
Diag. de estadosDiag. de estadosDiag. de estadosDiag. de estadosDiag. de actividadDiag. de actividadDiag. de actividadDiag. de actividad Diag. de implantaciDiag. de implantaciDiag. de implantaciDiag. de implantacióóóónnnn