Diferencia entre revisiones de «Usuario:ManuelRomero/sintaxis»
De WikiEducator
(→Instruccion de leer y escrivir o visualizar) |
|||
(64 revisiones intermedias por el mismo usuario no mostrado) | |||
Línea 1: | Línea 1: | ||
{{TEP}} | {{TEP}} | ||
− | {{:Usuario:ManuelRomero/CursoJavaUml/java/nav}} | + | {{:Usuario:ManuelRomero/CursoJavaUml/java/sintaxis/nav}} |
{{#widget:Slides}} | {{#widget:Slides}} | ||
<div class="slides layout-regular template-default"> | <div class="slides layout-regular template-default"> | ||
<div class="slide"> | <div class="slide"> | ||
− | ==Estructura de un programa en java== | + | ===Estructura de un programa en java=== |
*En java todo son clases | *En java todo son clases | ||
− | + | *Cada Clase en un fichero (salvo clases locales a una clase ) | |
+ | *Un programa escrito en java es un conjunto de clases | ||
+ | La estructura general de una clase | ||
<source lang=java> | <source lang=java> | ||
− | + | class NombreClase{ | |
//atributo/s | //atributo/s | ||
//metodo/s | //metodo/s | ||
Línea 15: | Línea 17: | ||
</source> | </source> | ||
</div> | </div> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | * | + | <div class="slide"> |
− | * | + | ===Elementos para definir una clase=== |
− | == | + | Tenemos los siguientes elementos |
+ | #Palabra reservada '''class''' | ||
+ | #Dos instrucciones: ''inicio de bloque'' y ''fin de bloque'' '''{''' y '''}''' resepectivamente | ||
+ | #Identificador '''NombreClase''' | ||
+ | #Comentarios '''//''' | ||
+ | *Las palabras reservadas son palabras con singnificado especial. | ||
+ | *Constituyen la parte léxica del lenguaje | ||
+ | *no se puede utilizar para otro propósito como identificadores. | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | ===Palabras reservadas=== | ||
+ | {| class="wikitable" | ||
+ | |+PALABRAS RESERVADAS EN JAVA | ||
+ | ||abstract ||double ||int ||strictfp ||boolean | ||
+ | |- | ||
+ | ||else ||interface ||super ||break ||extends | ||
+ | |- | ||
+ | ||long ||switch ||byte ||final ||native | ||
+ | |- | ||
+ | ||synchronized ||case ||finally ||new ||this | ||
+ | |- | ||
+ | ||catch ||float ||package ||throw ||char | ||
+ | |- | ||
+ | ||for ||private ||throws ||class ||goto* | ||
+ | |- | ||
+ | || protected ||transient ||const* || if ||public | ||
+ | |- | ||
+ | || try ||continue ||implements ||return ||void | ||
+ | |- | ||
+ | ||default ||import ||short ||volatile ||do | ||
+ | |- | ||
+ | ||instanceof ||static ||while | ||
+ | |} | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | ====Palabras reservadas==== | ||
+ | *Las palabras '''const''' y '''goto''' no se emplean actualemnte en java, pero son palabras reservadas | ||
+ | *Existen otras palabras reservadas correspondientes a métodos reservados a la clase Object que ya veremos | ||
+ | *Según vayamos avanzando iremos descubriendo estas palabras | ||
+ | *Algunas se usan continuamente | ||
+ | *Otras tienen un uso muy poco frecuente | ||
+ | *Iremos agrupando las palabras en grupos (Variables, modificadores de acceso, estructuras de controls, ...) | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | ===Programa Java: clases y método main=== | ||
*Un programa en java normalmente se organiza en proyecto | *Un programa en java normalmente se organiza en proyecto | ||
− | *Es muy común tener muchos ficheros .java | + | *Es muy común tener muchos ficheros '''.java''' |
− | *Sólo uno de ellos puede tener un método especial llamado main | + | *Sólo uno de ellos puede tener un método especial llamado '''main''' |
− | La ejecución del programa | + | *La ejecución del programa empezará en la primera instrucción que tenga un método '''main''' |
− | + | *solo puede haber uno en un proyecto | |
− | solo puede haber uno en un proyecto | + | *Se puede crear una clase sola para el main o incluir el método en alguna existente (ya lo veremos) |
<source lang=java> | <source lang=java> | ||
public class ClasePrincipal{ | public class ClasePrincipal{ | ||
Línea 39: | Línea 83: | ||
} | } | ||
</source> | </source> | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | ===Identificadores=== | ||
+ | Sirven para definir elementos que posteriormente vamos a utilizar (variables y/o atrivutos, constantes , métodos ,clases) | ||
+ | Deben ser lo más significativos posibles | ||
+ | Seguiremos unas reglas para mejorar la sintaxis | ||
+ | No son requisitos semánticos | ||
+ | *No se pueden emplear palabras reservadas | ||
+ | *Java es Sensitive Case, es decir los siguientes identificadores no son iguales | ||
+ | edad Edad EDAD edaD | ||
+ | *Los identificadores deben de ser '''significativos''' | ||
+ | int edad | ||
+ | String nombre | ||
+ | int calculaEdad(int fnac) | ||
+ | date fechaNacimiento | ||
+ | *las variables, atributos y métodos siempre en minúscula . | ||
+ | *Clases siempre la primer letra en mayúscula | ||
+ | *Constantes siempre todas las letras en mayúscula | ||
+ | *Se pueden emplear caracteres unicode, por lo que pueden aparecer secuencias de escape ''/uxxxx'' | ||
+ | *Si un identificador está formado por más de una palabra dos opciones | ||
+ | ** Mayúscula la primera letra de cada palabra | ||
+ | ** Separar con caracter de subrayado. ''Esto siempre en constantes ya que van en mayúscula'' | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | ====Identificadores==== | ||
+ | *El identificado debe usar los siguientes caracteres | ||
+ | [$|a..zA..Z|_][$|a..zA..Z|_|0..9]* | ||
+ | Empieza por '''$''' '''_''' o una letra del abecedario en mayúscula o minúscula. | ||
+ | Seguida de 0 o más caracteres de tipo '''$''' '''_''' letra o número | ||
+ | la ñ también es un caracter permitido para un identificador pero se recomienda no usarlo | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | ===Comentarios en el programa=== | ||
+ | *Una parte '''muy''' importante del software es lo que '''no''' son instrucciones | ||
+ | *un software hay que comentarlo | ||
+ | *No '''excesivamente''' pero sí lo '''suficiones''' (''ambos términos muy imprecisos'') | ||
+ | #comentarios hasta el final de la línea | ||
+ | //Este es un comentario hasta el final de la línea y empieza con | ||
+ | #comentario de varias líneas | ||
+ | /* hasta que encuentre la pareja | ||
+ | de caracteres final de comentario | ||
+ | esto se considerará un comentario | ||
+ | */ | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | ====Comentarios de documentación==== | ||
+ | #comentarios de docuemntacion | ||
+ | Este tercer tipo de comentario es más especial | ||
+ | /** | ||
+ | Este es un comentario | ||
+ | multilínea | ||
+ | y además sirve para realizar un documento | ||
+ | con la documentación del programa | ||
+ | */ | ||
+ | *Se pueden hacer comentarios a diferentes niveles | ||
+ | ** A nivel de clase | ||
+ | ** A nivel de variable/atributo | ||
+ | ** A nivel de método | ||
+ | *Los comentario deben de ir inmediatamente antes del elemento que comentas | ||
+ | *Se puede utilizar tags @author @version @param @return | ||
+ | *javadoc.exe -author -version para que aparezcan al principio de la clase | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | ====Comentarios de documentación==== | ||
+ | <br/> | ||
+ | {{Actividad| | ||
+ | Haz un porgrama y crea la documentación: | ||
+ | *Nombre de la clase | ||
+ | *Información de la versión | ||
+ | *Fecha | ||
+ | *Autor | ||
+ | *Objetivo muy general | ||
+ | *Aviso de copyrigh | ||
+ | *En el main parámetros y retorno | ||
+ | }} | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | |||
+ | ===Instruccion de ''leer'' y ''escribir'' o ''visualizar''=== | ||
+ | <br/> | ||
+ | *En java no existen estas instrucciones | ||
+ | *El API de java nos proporciona clases que implementan métodos con esa funcionalidad | ||
+ | *En concreto la clase System | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | ====La clase System==== | ||
+ | *Es una clase final y todos sus contenidos son privados | ||
+ | *No se puede instanciar un objeto de esa clase | ||
+ | *La clase System siempre está ahí disponible para que se pueda invocar cualquiera de sus métodos | ||
+ | *Es miembro del paquete '''java.lang''' | ||
+ | *Todos los miembros del paquete '''java.lang''' se pueden usar directamente | ||
+ | *no hay que importarlos | ||
+ | *En esta clase se definen los dispositivos estándar de entrada/salida | ||
+ | static PrintStream err; | ||
+ | static InputStream in; | ||
+ | static PrintStream out; | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | ====Métodos de System.out==== | ||
+ | *Son los métodos de la clase '''PrintStream''' | ||
+ | http://docs.oracle.com/javase/7/docs/api/java/io/PrintStream.html | ||
+ | #Principales | ||
+ | println("Cadena ...")//Escrible sus argumentos y al final añade un \n | ||
+ | print ("Cadena ...") //Lo mismo pero no añade un salto de línea | ||
+ | printf("Cadena...",argumentos) //Para los amantes del c %d,%c,%s,.... | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | ====Métods de System.in Vs Scanner==== | ||
+ | *A partir de Java 5 apareció la clase Scanner | ||
+ | *Es mas sencilla de utilizar que System.in | ||
+ | *Es mucha la flexibilidad que presenta | ||
+ | *Está dentro del paquete '''java.util''' | ||
+ | *Hay que importarla para poderla utilizar | ||
+ | import java.util.Scanner; | ||
+ | *Hay que definirse un objeto de esa clase | ||
+ | Scanner leer = new Scanner(System.in); | ||
+ | *Tiene muchos usos, por ejemplo leer la siguiente línea del teclado | ||
+ | leer.nextLine(); | ||
+ | *Para la sintaxis de java aprenderemos su uso | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | |||
+ | ====Clase java.util.Scanner==== | ||
+ | <source lang=java> | ||
+ | import java.util.Scanner;/* Debemos cargar la clase | ||
+ | ya que no está en el paquete '''lang''', | ||
+ | sino en el paquete '''util''' */ | ||
+ | class Principal{ | ||
+ | public static void main(String []argc){ | ||
+ | int num; | ||
+ | Scanner leer = new Scanner(System.in);//Una clase se instancia de esta manera | ||
+ | //Le pasamos un objeto InputStream asociado al teclado | ||
+ | System.out.println("Dime tu edad"); | ||
+ | num=leer.nextInt(); //Invocamos al método para obtener el siguiente entero del buffer | ||
+ | System.out.println("Tienes "+edad+" años de edad"); | ||
+ | } | ||
+ | } | ||
+ | </source> | ||
+ | <br/> | ||
+ | {{Actividad|hacer un programa que me pida la edad y nombre y la visualice}} | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | |||
+ | ===Instrucion declarativa=== | ||
+ | *La instruccion de declaración de variables o atributos es | ||
+ | tipo_variable [[#Identificadores_2|identificador]] [= valor_inicial] | ||
+ | #[[#Identificadores_2|identificador]] es el nombre de la variable | ||
+ | #'''valor_inicial''' opcionalmente se puede inicializar la variable en la propia declaración | ||
+ | int edad=18, sueldo=1000; | ||
+ | //defino dos variables de tipo entero y las inicializo con valores | ||
+ | *En general se puede definir una lista de [[#Identificadores_2|identificadores]] del mimo tipo | ||
+ | *cada uno de ellos se puede inicializar | ||
+ | int a,b,c=1,d=100,e,f; | ||
+ | defino seis [[#Identificadores_2|identificadores]] ''a,b,d,c,d,e'' e inicializo dos de ellos ''c=1 y d = 100'' | ||
+ | la expresión regular para las instruccion declarativa sería | ||
+ | [tipo_dato lista_identificadores] | ||
+ | donde lista_identificadores un conjunto de [[#Identificadores_2|identificadores]] separados por comas opcionalmente inicializados. | ||
+ | |||
+ | *En '''java''' las variables siempre tienen un valor inicial | ||
+ | *Existen en '''java''' dos tipos | ||
+ | #tipos '''primitivos'''(''byte,short,int,long,double,float,char,boolean,void'') | ||
+ | #tipos de '''referencia'''(los que no son primitivos ''vectores, clases e interfaces'') | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | ====Clasificacion de tipos==== | ||
+ | [[Archivo:tipos.png|800px]] | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | ====TIPOS PRIMITIVOS==== | ||
+ | La siguiente tabla muestra una relación de tipos simples | ||
+ | <BR/> | ||
+ | [[Archivo:tiposSimples.png|600px]] | ||
+ | </div> | ||
+ | |||
+ | |||
+ | |||
+ | <div class="slide"> | ||
+ | ====TIPOS PRIMITIVOS==== | ||
+ | <br/> | ||
+ | {{Pregunta|Tipos primitivos en un lenguajes orientado a objetos}} | ||
+ | ;En java casi todo son objetos | ||
+ | :Excepciones tipos primitivos para representar valores sin mas | ||
+ | :''''todos''' con el '''mismo''' tamaño y comportamiento | ||
+ | :para cualquier hardware | ||
+ | :para cualquier S.O | ||
+ | {{Nota|si has programado con C sabrás lo bueno que es esto :)}} | ||
+ | *Con los datos primitivos se pueden construyen los array | ||
+ | *tambien pueden aparecer en clases e interfaces | ||
+ | :todo tipo primitivo tiene asociado una clase | ||
+ | :se conoce como 'Wrapper' | ||
+ | :Todo tipo primitivo se puede manejar como objeto | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | |||
+ | ====TIPOS DE REFERENCIA==== | ||
+ | *Son todos objetos | ||
+ | *Para utilizar en Java los objetos debemos hacer dos acciones | ||
+ | *1 definir el objeto | ||
+ | Scanner leer; | ||
+ | *2 instanciarlo o cargarlo en memoria | ||
+ | leer = new Scanner(); | ||
+ | *Se puede hacer en la misma línea | ||
+ | Scanner leer = new Scanner(); | ||
+ | #El operador '''new''' palabra reservada del lenguaje instancia un objeto de una clase | ||
+ | #instanciar es cargalo en memoria | ||
+ | #la variable contendra la direccion de memoria del objeto | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | |||
+ | ====TIPOS DE REFERENCIA==== | ||
+ | *Son todos objetos | ||
+ | *Para utilizar en Java los objetos debemos hacer dos acciones | ||
+ | *1 definir el objeto | ||
+ | Scanner leer; | ||
+ | *2 instanciarlo o cargarlo en memoria | ||
+ | leer = new Scanner(); | ||
+ | *Se puede hacer en la misma línea | ||
+ | Scanner leer = new Scanner(); | ||
+ | #El operador '''new''' palabra reservada del lenguaje instancia un objeto de una clase | ||
+ | #instanciar es cargalo en memoria | ||
+ | #la variable contendrá la dirección de memoria del objeto(por eso es una referencia) | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | |||
+ | ====TIPOS DE REFERENICA '''ARRAY'''==== | ||
+ | #arrays: para definir una variable de este tipo '''[]''' | ||
+ | int notas[]; | ||
+ | notas = new int[100] | ||
+ | *Un '''array''' es una coleccion de elementos del mismo tipo | ||
+ | *Se caracteriza por el tipo base que son el tipo de los elementos que contiene | ||
+ | *También por el número de elementos. | ||
+ | *El número es fijo y no puede cambiar una vez inicializado | ||
+ | *Si necesitamos dinamismo mejor usar la clase '''java.util.Vector''' | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | ====TIPOS DE REFERENICA '''CLASES E INTERFACES'''==== | ||
+ | #Clases e interfaces | ||
+ | Se definen con la estructura vista anteriormente | ||
+ | public class NombreClase{ | ||
+ | } | ||
+ | public interface NombreInterfaz{ | ||
+ | } | ||
+ | Para crear elementos de este tipo | ||
+ | NombreClase objeto1 = nes NombreClase(); | ||
+ | NombreInterfaz objetoInterfaz = new NombreInterfaz() | ||
+ | # | ||
+ | </div> | ||
+ | <div class="slide"> | ||
+ | ====Variables y objetos==== | ||
+ | *Las variables valores de tipos primitivos | ||
+ | *Los objetos son elementos de tipos de referencia | ||
+ | ** Ambos son elementos que residen en memoria | ||
+ | ** Accedo en ellos a traves de su nombre | ||
+ | *Para ver la idea de que los identificadores son referencias a memoria observemos el siguiente código | ||
+ | </div> | ||
+ | <div class="slide"> | ||
+ | |||
+ | ===INSTRUCCION DE ASIGNACIÓN=== | ||
+ | El operador de asiganción es '''=''' | ||
+ | La sintaxis es | ||
+ | variable = expresion | ||
+ | El tipo de la variable y el de la expresión deben coincidir | ||
+ | |||
+ | ====Asignacion entre objetos==== | ||
+ | <source lang=java> | ||
+ | import java.util.Scanner; | ||
+ | public class Definicion { | ||
+ | public static void main(String []a){ | ||
+ | String nom; | ||
+ | Scanner l1,l2; | ||
+ | l1=new Scanner(System.in); | ||
+ | l2=l1; //En realidad son el mismo elemento ya que son la misma dirección de memoria | ||
+ | System.out.println("dame tu nombre que leeré con L2"); | ||
+ | nom = l2.next(); //introduzco Manuel Romero Miguel Perez | ||
+ | System.out.println("Leyendo de L2 " +nom);// Visualiza Manuel | ||
+ | System.out.println("dame tu nombre L1"); | ||
+ | nom=l1.next();//No espera ya que todavia tiene en el buffer Romero Miguel Perez | ||
+ | System.out.println("Leyendo de L1 " +nom); //Visualiza Romero | ||
+ | nom = l2.next(); | ||
+ | System.out.println("Resto de L2 " +nom);//Visualiza Miguel | ||
+ | nom = l1.next(); | ||
+ | System.out.println("Resto de L1 " +nom);//Visualiza Lopez | ||
+ | } | ||
+ | } | ||
+ | </source> | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | ====Salida del código anterior==== | ||
+ | dame tu nombre que leeré con L2 | ||
+ | Manuel Romero Miguel Pérez | ||
+ | Leyendo de L2 Manuel | ||
+ | dame tu nombre L1 | ||
+ | Leyendo de L1 Romero | ||
+ | Resto de L2 Miguel | ||
+ | Resto de L1 Pérez | ||
+ | Probar a que l1 y l2 sean dos objetos diferentes | ||
+ | l1=new Scanner(System.in); | ||
+ | l2=new Scanner(System.in); | ||
+ | Y no hacemos la asignacion '''l2=l1''' | ||
+ | {{Pregunta|observamos la diferencia? | ||
+ | #ahora l1 y l2 son dos buffers diferente | ||
+ | #cada uno guarda historia de lo que almacea | ||
+ | }} | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | ====la expresion==== | ||
+ | Un literal puede ser un valor de los siguientes tipos | ||
+ | numérico | ||
+ | boolean | ||
+ | false true | ||
+ | caracter | ||
+ | Literal entre comillas simples '' 'c' '' | ||
+ | Secuencia unicode '''\u064''' | ||
+ | Secuencia de escape \t | ||
+ | |||
+ | ===Qué puede haber dentro de una clase=== | ||
+ | *Una clase representa a un elemento del programa | ||
+ | *En '''POO''' el programa '''va a ser un conjunto de objetos que interactúan entre sí''' | ||
+ | *Cada objeto es un elemento del sistema | ||
+ | **Con unos '''atributos''' que le definen | ||
+ | **Con un comportamiento que le caracteriza | ||
+ | *Las clases me permite crear el modelo de los objetos | ||
+ | |||
+ | |||
+ | *básicamente dentro de una clase podemos tener | ||
+ | *atributos o datos (variables, constantes, objetos) | ||
+ | *métodos (que definen el comportamiento | ||
+ | *Definir otras clases locales a la clase | ||
+ | |||
+ | *Los datos nos referiremos a ellos como atributos llamado así en terminología orientada a objetos | ||
+ | *A las funciones las identificaremos como métodos | ||
+ | </div> | ||
+ | </div> |
Última revisión de 07:49 15 feb 2016
Trabajo en proceso, espera cambios frecuentes. Tu ayuda y retroalimentación son bienvenidos. Ver página de charlas. |