1 FUNDAMENTOS DE PROGRAMACIÓN Moisés Valenzuela Gutiérrez 2 2009 Moisés Valenzuela Gutiérrez Portada diseño: Celeste Ortega (www.cedeceleste.com) Edición cortesía de www.publicatuslibros.com. Debe reconocer los créditos de la obra de la manera especificada por el autor o el licenciador (pero no de una manera que sugiera que tiene su apoyo o apoyan el uso que hace de su obra). No puede utilizar esta obra para fines comerciales. Si altera o transforma esta obra, o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Nada en esta licencia menoscaba o restringe los derechos morales del autor. Publicatuslibros.com es una iniciativa de: Íttakus, sociedad para la información, S.L. C/ Millán de Priego, 41, P 14, 1 N 23004 Jaén-España Tel.: +34 953 08 76 80 www.ittakus.com 3 INTRODUCCION Este libro está dirigido a estudiantes que cursen Ciclos Formativos de Grado Superior en Administración de Sistemas Informáticos y Desarrollo de Aplicaciones Informáticas. Concretamente está orientado para la asignatura de primer curso Fundamentos de Programación , habiendo parte de la asignatura que se orienta hacia el desarrollo de la programación orientada a objetos. En este libro se detallan las características básicas de la programación orientada a objetos utilizando para ello el lenguaje de programación y orientado a objetos Visual C# que se encuentra dentro de paquete .NET perteneciente a la compañía Microsoft . Se detalla la definición de clase y objeto detallado mediante ejemplos , así como todas las sentencias iterativas y simples necesarias para la implementación de programas. También se detalla la creación de constructores y por ultimo una propiedad propia de los lenguajes orientados a objetos como es la herencia. 4 INDICE. TEMA 1. LENGUAJE C#. • 1.1.‐ PROGRAMACION ORIENTADA A OBJETOS. • 1.2.‐ BASES SINTACTICAS DE C#. • 1.3.‐ TIPOS. • 1.4.‐ DECLARACION DE VARIABLES. • 1.5.‐ SENTENCIA IF….ELSE. • 1.6.‐ SENTENCIA DO….WHILE. • 1.7.‐ SENTENCIA FOR. • 1.8.‐ MATRICES. TEMA 2. CLASES Y OBJETOS. • 2.1. INTRODUCCION A CLASES. • 2.2. METODOS. • 2.3. DISEÑO DE UNA CLASE DE OBJETOS. TEMA 3. CONSTRUCTORES Y HERENCIA. • 3.1.‐ CONSTRUCTOR. • 3.2.‐ HERENCIA. 5 TEMA 1. LENGUAJE C#. 1.1.‐ PROGRAMACION ORIENTADA A OBJETOS. Clases y objetos. Vamos a entrar de lleno para comprender las clases, los objetos y en que se diferencian. No son lo mismo las clases y los objetos. Para que pueda haber un objeto debe existir previamente una clase, pero no al revés. Ejemplo: Tenemos un coche, todos ellos tienen una serie de características comunes: tienen un motor, ruedas, un volante, chasis…..; todos funcionan de un modo parecido para acelerar, frenar, meter las marchas…; sin embargo, cada uno de ellos es diferente de los demás, puesto que cada uno es de una marca, modelo, color, numero de bastidor, propiedades que lo diferencian de los demás, aunque una o varias de ellas puedan coincidir en varios coches. Diríamos entonces que todos los coches están basados en una plantilla, o un tipo de objeto, es decir, pertenecen todos a la misma clase: la clase coche. Sin embargo, cada uno de los coches es un objeto de esa clase; todos comparten la interfaz, pero no tienen porque compartir los datos (marca, modelo, color, etc). Se dice entonces que cada uno de los objetos es una instancia de la clase a la que pertenece, es decir, un objeto. Veamos como seria esto en C#. El diseño de la clase Coche sería algo parecido a esto (aunque más ampliado): class Coche { public Coche(string marca, string modelo, string color, string numbastidor) { this.Marca=marca; 6 this.Modelo=modelo; this.Color=color; this.NumBastidor=numbastidor; } public double Velocidad { get { return this.velocidad; } } public double velocidad=0; public string Marca; public string Modelo; public string Color; public void Acelerar (double cantidad) { // Aquí se le dice al motor que aumente las revoluciones pertinentes, y ….. Console.WriteLine (“Incrementando la velocidad en {0} km/h”, cantidad); this.velocidad = cantidad; } public void Girar (double cantidad) { //Aquí iría el código para girar Console.WriteLine(“Girando el coche {0} grados “, cantidad); 7 } } Veamos una clase con un método Main para ver como se comportaría esta clase: class EjemploCocheApp { static void Main() { Coche MiCoche=new Coche(“Peugeot”, “306”, “Azul”,”15343534”); Console.WriteLine(“Los datos de mi coche son:”); Console.WriteLine(“Marca: {0}”, MiCoche.Marca); Console.WriteLine(“Modelo: {0}”, MiCoche.Modelo); Console.WriteLine(“Color: {0}”, MiCoche.Color); Console.WriteLine(“Numero de bastidor: {0}”, MiCoche.Numbastidor); MiCoche.Acelerar(100); Console.WriteLine(“La velocidad actual es de {0} km/h”, MiCoche.Velocidad); MiCoche.Girar(45); } } El resultado que aparecería en la consola al ejecutar este programa seria esta: Los datos de mi coche son: Marca: Peugeot Modelo: 306 Color: Azul 8 Numero de bastidor: 15343534 Incrementado la velocidad en 100 km/h La velocidad actual es de 100 km/h Girando el coche 45 grados. No te preocupes por no entender el código, ya lo iremos viendo largo y tendido. Nos fijamos que en la clase es donde se definen los datos y se programan todas las acciones que han de manejar los objetos de esta clase. Los datos son Velocidad, Marca, Modelo, Color y NumBastidor, y los métodos son Acelerar y Girar. Sin embargo, el objeto, MiCoche (creado en la primera línea del método Main) no define absolutamente nada. Simplemente usa la interfaz diseñada en la clase (la interfaz de una clase es el conjunto de métodos y propiedades que esta ofrece para su manejo). Por lo tanto, Coche es la clase y MiCoche un objeto de esta clase. 1.2.‐ BASES SINTACTICAS DE C#. Aplicación básica ¡Hola a todos! Como primer contacto con el lenguaje, nada mejor que el típico programa de iniciación “¡Hola a todos!” que lo único que hace al ejecutarse es mostrar por pantalla el mensaje ¡Hola a todos! Su código es: 1: class HolaMundo 2: { 3: static void Main() 4: { 5: System.Console.WriteLine(“¡Hola a todos!”); 6: } 7: } Todo el código escrito en C# se ha de escribir dentro de una definición de clase, y lo que en la línea 1: se dice es que se va a definir una clase (class) de nombre HolaMundo cuya definición estará comprendida entre la llave de apertura de la línea 2: y su correspondiente llave de cierre en la línea línea 7: 9 Dentro de la definición de la clase (línea 3:) se define un método de nombre Main cuyo código es el indicado entre la llave de apertura de la línea 4: y su respectiva llave de cierre (línea 6:) Un método no es más que un conjunto de instrucciones a las que se les asocia un nombre, de modo que para posteriormente ejecutarlas baste referenciarlas por su nombre en vez de tener que rescribirlas. La partícula que antecede al nombre del método indica cuál es el tipo de valor que se devuelve tras la ejecución del método, y en este caso es void que significa que no se devuelve nada. Por su parte, los paréntesis colocados tras el nombre del método indican cuáles son los parámetros que éste toma, y el que estén vacíos significa que el método no toma ninguno. Los parámetros de un método permiten modificar el resultado de su ejecución en función de los valores que se les dé en cada llamada. La palabra static que antecede a la declaración del tipo de valor devuelto es un modificador del significado de la declaración de método que indica que el método está asociado a la clase dentro de la que se define y no a los objetos que se creen a partir de ella. Main() es lo que se denomina el punto de entrada de la aplicación, que no es más que el método por el que comenzará su ejecución. Necesita del modificador static para evitar que para llamarlo haya que crear algún objeto de la clase donde se haya definido. Finalmente, la línea 5: contiene la instrucción con el código a ejecutar, que lo que se hace es solicitar la ejecución del método WriteLine() de la clase Console definida en el espacio de nombres System pasándole como parámetro la cadena de texto con el contenido ¡Hola Mundo! Nótese que las cadenas de textos son secuencias de caracteres delimitadas por comillas dobles aunque dichas comillas no forman parte de la cadena. Por su parte, un espacio de nombres puede considerarse que es para las clases algo similar a lo que un directorio es para los ficheros: una forma de agruparlas. 1.3.‐ TIPOS. Los tipos en C# se clasifican en: tipos valor y tipo referencia. Una variable de un tipo valor almacena directamente un valor (datos en general), mientras que una variable de un referencia lo que permite almacenar es una referencia a un objeto (posición de memoria donde está el objeto). Por ejemplo: 10