Usuario:ManuelRomero/sintaxis

Estructura de un programa en java
La estructura general de una clase
 * 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

Elementos para definir una clase
Tenemos los siguientes elementos
 * 1) Palabra reservada class
 * 2) Dos instrucciones: inicio de bloque y fin de bloque { y } resepectivamente
 * 3) Identificador NombreClase
 * 4) 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.

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, ...)

Programa Java: clases y método main

 * Un programa en java normalmente se organiza en proyecto
 * Es muy común tener muchos ficheros .java
 * Sólo uno de ellos puede tener un método especial llamado main
 * La ejecución del programa empezará en la primera instrucción que tenga un método main
 * 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)

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 edad Edad EDAD edaD int edad String nombre int calculaEdad(int fnac) date fechaNacimiento
 * No se pueden emplear palabras reservadas
 * Java es Sensitive Case, es decir los siguientes identificadores no son iguales
 * Los identificadores deben de ser significativos
 * 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

Identificadores
[$|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
 * El identificado debe usar los siguientes caracteres

Comentarios en el programa
//Este es un comentario hasta el final de la línea y empieza con /* hasta que encuentre la pareja de caracteres final de comentario esto se considerará un comentario */
 * 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)
 * 1) comentarios hasta el final de la línea
 * 1) comentario de varias líneas

Comentarios de documentación
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 */
 * 1) comentarios de docuemntacion
 * 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

Instruccion de leer y escribir o visualizar

 * 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

La clase System
static PrintStream err; static InputStream in; static PrintStream out;
 * 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

Métodos de System.out
http://docs.oracle.com/javase/7/docs/api/java/io/PrintStream.html 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,....
 * Son los métodos de la clase PrintStream
 * 1) Principales

Métods de System.in Vs Scanner
import java.util.Scanner; Scanner leer = new Scanner(System.in); leer.nextLine;
 * 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
 * Hay que definirse un objeto de esa clase
 * Tiene muchos usos, por ejemplo leer la siguiente línea del teclado
 * Para la sintaxis de java aprenderemos su uso

Instrucion declarativa
tipo_variable identificador [= valor_inicial] int edad=18, sueldo=1000; //defino dos variables de tipo entero y las inicializo con valores int a,b,c=1,d=100,e,f; defino seis 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 separados por comas opcionalmente inicializados.
 * La instruccion de declaración de variables o atributos es
 * 1) identificador es el nombre de la variable
 * 2) valor_inicial opcionalmente se puede inicializar la variable en la propia declaración
 * En general se puede definir una lista de identificadores del mimo tipo
 * cada uno de ellos se puede inicializar


 * En java las variables siempre tienen un valor inicial
 * Existen en java dos tipos
 * 1) tipos primitivos(byte,short,int,long,double,float,char,boolean,void)
 * 2) tipos de referencia(los que no son primitivos vectores, clases e interfaces)

TIPOS PRIMITIVOS
La siguiente tabla muestra una relación de tipos simples 

TIPOS PRIMITIVOS

 * 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

*tambien pueden aparecer en clases e interfaces
 * Con los datos primitivos se pueden construyen los array
 * todo tipo primitivo tiene asociado una clase
 * se conoce como 'Wrapper'
 * Todo tipo primitivo se puede manejar como objeto

TIPOS DE REFERENCIA
Scanner leer; leer = new Scanner; Scanner leer = new Scanner;
 * Son todos objetos
 * Para utilizar en Java los objetos debemos hacer dos acciones
 * 1 definir el objeto
 * 2 instanciarlo o cargarlo en memoria
 * Se puede hacer en la misma línea
 * 1) El operador new palabra reservada del lenguaje instancia un objeto de una clase
 * 2) instanciar es cargalo en memoria
 * 3) la variable contendra la direccion de memoria del objeto

TIPOS DE REFERENCIA
Scanner leer; leer = new Scanner; Scanner leer = new Scanner;
 * Son todos objetos
 * Para utilizar en Java los objetos debemos hacer dos acciones
 * 1 definir el objeto
 * 2 instanciarlo o cargarlo en memoria
 * Se puede hacer en la misma línea
 * 1) El operador new palabra reservada del lenguaje instancia un objeto de una clase
 * 2) instanciar es cargalo en memoria
 * 3) la variable contendrá la dirección de memoria del objeto(por eso es una referencia)

TIPOS DE REFERENICA ARRAY
int notas[]; notas = new int[100]
 * 1) arrays: para definir una variable de este tipo []
 * 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

TIPOS DE REFERENICA 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
 * 1) Clases e interfaces

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

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

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

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