Moises Valenzuela Gutierrez-fundamentos de Programacion

58
1

Transcript of Moises Valenzuela Gutierrez-fundamentos de Programacion

Page 1: Moises Valenzuela Gutierrez-fundamentos de Programacion

1

Page 2: Moises Valenzuela Gutierrez-fundamentos de Programacion

2

FUNDAMENTOSDEPROGRAMACIÓN

MoisésValenzuelaGutiérrez

Page 3: Moises Valenzuela Gutierrez-fundamentos de Programacion

3

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

Page 4: Moises Valenzuela Gutierrez-fundamentos de Programacion

4

INTRODUCCION

EstelibroestádirigidoaestudiantesquecursenCiclosFormativosdeGradoSuperiorenAdministración de Sistemas Informáticos y Desarrollo de Aplicaciones Informáticas.Concretamente está orientado para la asignatura de primer curso Fundamentos deProgramación ,habiendopartede laasignaturaqueseorientahaciaeldesarrollode laprogramaciónorientadaaobjetos.

EnestelibrosedetallanlascaracterísticasbásicasdelaprogramaciónorientadaaobjetosutilizandoparaelloellenguajedeprogramaciónyorientadoaobjetosVisualC#queseencuentradentrodepaquete.NETpertenecientealacompañíaMicrosoft.

Sedetallaladefinicióndeclaseyobjetodetalladomedianteejemplos,asícomotodaslassentencias iterativas y simples necesarias para la implementación de programas.Tambiénsedetallalacreacióndeconstructoresyporultimounapropiedadpropiadeloslenguajesorientadosaobjetoscomoeslaherencia.

Page 5: Moises Valenzuela Gutierrez-fundamentos de Programacion

5

INDICE.

TEMA1.LENGUAJEC#.

• 1.1.‐PROGRAMACIONORIENTADAAOBJETOS.

• 1.2.‐BASESSINTACTICASDEC#.

• 1.3.‐TIPOS.

• 1.4.‐DECLARACIONDEVARIABLES.

• 1.5.‐SENTENCIAIF….ELSE.

• 1.6.‐SENTENCIADO….WHILE.

• 1.7.‐SENTENCIAFOR.

• 1.8.‐MATRICES.

TEMA2.CLASESYOBJETOS.

• 2.1.INTRODUCCIONACLASES.

• 2.2.METODOS.

• 2.3.DISEÑODEUNACLASEDEOBJETOS.

TEMA 3. CONSTRUCTORES Y HERENCIA.

• 3.1.‐CONSTRUCTOR.

• 3.2.‐HERENCIA.

Page 6: Moises Valenzuela Gutierrez-fundamentos de Programacion

6

TEMA1.LENGUAJEC#.

1.1.‐PROGRAMACIONORIENTADAAOBJETOS.

Clasesyobjetos.

Vamos a entrar de lleno para comprender las clases, los objetos y en que sediferencian.

Noson lomismo lasclasesy losobjetos.Paraquepuedahaberunobjetodebeexistirpreviamenteunaclase,peronoalrevé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 modoparecido para acelerar, frenar, meter las marchas…; sin embargo, cada uno deellosesdiferentede losdemás,puestoquecadaunoesdeunamarca,modelo,color,numerodebastidor,propiedadesquelodiferenciandelosdemás,aunqueunaovariasdeellaspuedancoincidirenvarioscoches.Diríamosentoncesquetodos los coches están basados en una plantilla, o un tipo de objeto, es decir,pertenecentodosalamismaclase:laclasecoche.Sinembargo,cadaunodeloscoches es un objeto de esa clase; todos comparten la interfaz, pero no tienenporque compartir los datos (marca, modelo, color, etc). Se dice entonces quecadaunodelosobjetosesunainstanciadelaclasealaquepertenece,esdecir,unobjeto.VeamoscomoseriaestoenC#.EldiseñodelaclaseCocheseríaalgoparecidoaesto(aunquemásampliado):

classCoche

{

publicCoche(stringmarca,stringmodelo,stringcolor,stringnumbastidor)

{

this.Marca=marca;

Page 7: Moises Valenzuela Gutierrez-fundamentos de Programacion

7

this.Modelo=modelo;

this.Color=color;

this.NumBastidor=numbastidor;

}

publicdoubleVelocidad

{

get

{

returnthis.velocidad;

}

}

publicdoublevelocidad=0;

publicstringMarca;

publicstringModelo;

publicstringColor;

publicvoidAcelerar(doublecantidad)

{

//Aquíseledicealmotorqueaumentelasrevolucionespertinentes,y…..

Console.WriteLine(“Incrementandolavelocidaden{0}km/h”,cantidad);

this.velocidad=cantidad;

}

publicvoidGirar(doublecantidad)

{

//Aquíiríaelcódigoparagirar

Console.WriteLine(“Girandoelcoche{0}grados“,cantidad);

Page 8: Moises Valenzuela Gutierrez-fundamentos de Programacion

8

}

}

VeamosunaclaseconunmétodoMainparavercomosecomportaríaestaclase:

classEjemploCocheApp

{

staticvoidMain()

{

CocheMiCoche=newCoche(“Peugeot”,“306”,“Azul”,”15343534”);

Console.WriteLine(“Losdatosdemicocheson:”);

Console.WriteLine(“Marca:{0}”,MiCoche.Marca);

Console.WriteLine(“Modelo:{0}”,MiCoche.Modelo);

Console.WriteLine(“Color:{0}”,MiCoche.Color);

Console.WriteLine(“Numerodebastidor:{0}”,MiCoche.Numbastidor);

MiCoche.Acelerar(100);

Console.WriteLine(“La velocidad actual es de {0} km/h”,MiCoche.Velocidad);

MiCoche.Girar(45);

}

}

Elresultadoqueapareceríaenlaconsolaalejecutaresteprogramaseriaesta:

Losdatosdemicocheson:

Marca:Peugeot

Modelo:306

Color:Azul

Page 9: Moises Valenzuela Gutierrez-fundamentos de Programacion

9

Numerodebastidor:15343534

Incrementadolavelocidaden100km/h

Lavelocidadactualesde100km/h

Girandoelcoche45grados.

Notepreocupespornoentenderelcódigo,yaloiremosviendolargoytendido.Nosfijamosqueenlaclaseesdondesedefinenlosdatosyseprogramantodaslasaccionesquehandemanejar losobjetosdeestaclase.LosdatossonVelocidad,Marca,Modelo, Color y NumBastidor, y losmétodos son Acelerar y Girar. Sinembargo, el objeto,MiCoche (creado en la primera líneadelmétodoMain)nodefineabsolutamentenada.Simplementeusalainterfazdiseñadaenlaclase(lainterfaz de una clase es el conjunto demétodos y propiedades que esta ofrecepara sumanejo). Por lo tanto, Coche es la clase yMiCoche un objeto de estaclase.

1.2.‐BASESSINTACTICASDEC#.

Aplicaciónbásica¡Holaatodos!

Como primer contacto con el lenguaje, nadamejor que el típico programa deiniciación “¡Hola a todos!” que lo único que hace al ejecutarse es mostrar porpantallaelmensaje¡Holaatodos!Sucódigoes:

1: classHolaMundo2: {3: staticvoidMain()4: {5: System.Console.WriteLine(“¡Holaatodos!”);6: }7: }

TodoelcódigoescritoenC#sehadeescribirdentrodeunadefinicióndeclase,yloque en la línea 1: sedice esque se va adefiniruna clase (class)denombreHolaMundocuyadefiniciónestarácomprendidaentre la llavedeaperturade lalínea2:ysucorrespondientellavedecierreenlalínealínea7:

Page 10: Moises Valenzuela Gutierrez-fundamentos de Programacion

10

Dentrodeladefinicióndelaclase(línea3:)sedefineunmétododenombreMaincuyocódigoeselindicadoentrelallavedeaperturadelalínea4:ysurespectivallavedecierre(línea6:)Unmétodonoesmásqueunconjuntodeinstruccionesalas que se les asocia un nombre, demodo que para posteriormente ejecutarlasbastereferenciarlasporsunombreenvezdetenerquerescribirlas.

Lapartículaqueantecedealnombredelmétodo indicacuálesel tipodevalorquesedevuelvetraslaejecucióndelmétodo,yenestecasoesvoidquesignificaquenosedevuelvenada.Porsuparte,losparéntesiscolocadostraselnombredelmétodo indicancuáles son losparámetrosqueéste toma, y elqueesténvacíossignifica que el método no toma ninguno. Los parámetros de un métodopermitenmodificarelresultadodesuejecuciónenfuncióndelosvaloresqueselesdéencadallamada.

Lapalabrastaticqueantecedealadeclaracióndeltipodevalordevueltoesunmodificador del significado de la declaración de método que indica que elmétodoestáasociadoalaclasedentrodelaquesedefineynoalosobjetosquesecreenapartirdeella.Main()esloquesedenominaelpuntodeentradadelaaplicació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 crearalgúnobjetodelaclasedondesehayadefinido.

Finalmente,lalínea5:contienelainstrucciónconelcódigoaejecutar,queloquese hace es solicitar la ejecución delmétodoWriteLine() de la claseConsoledefinidaenelespaciodenombresSystempasándolecomoparámetrolacadenade texto con el contenido ¡HolaMundo!Nótese que las cadenas de textos sonsecuenciasdecaracteresdelimitadasporcomillasdoblesaunquedichascomillasno forman parte de la cadena. Por su parte, un espacio de nombres puedeconsiderarsequeesparalasclasesalgosimilaraloqueundirectorioesparalosficheros:unaformadeagruparlas.

1.3.‐TIPOS.

LostiposenC#seclasificanen:tiposvalorytiporeferencia.Unavariabledeuntipovaloralmacenadirectamenteunvalor(datosengeneral),mientrasqueunavariabledeunreferencialoquepermitealmacenaresunareferenciaaunobjeto(posicióndememoriadondeestáelobjeto).Porejemplo:

Page 11: Moises Valenzuela Gutierrez-fundamentos de Programacion

11

intsuma=0;//Sumaalmacenaunentero.

stringcadena=españa;//Cadenapermitiráalmacenarunareferencia

//aunobjetostring

.

1.4.‐DECLARACIONDEVARIABLES.

Unavariable representaunespaciodememoriaparaalmacenarunvalordeundeterminadotipo.Lasintaxisparadeclararunavariableeslasiguiente:

tipoidentificador[,identificador]…

Enelejemplosedeclarandosvariablesdetipoint,unavariabledetipostringydosvariablesdetipostring:

voidvariables()

{

intcontador=0;

stringNombre=”“;

intdia=20;

Apellidos=“Ceballos”;

}

Ejemplo1:

Veamos el siguiente ejercicio. Guarda el proyecto comoOperacionesAritmeticas.

El programa declara tres variables y a dos de ellas le asigna un valor. Acontinuación se realiza la suma de esos valores y se escriben los datos y elresultado. Copia el programa y lo compilas, ejecútalo a continuación ycompruebalosresultados.

Page 12: Moises Valenzuela Gutierrez-fundamentos de Programacion

12

class Program

{

/* Operaciones Aritmeticas*/

static void Main(string[] args)

{

int dato1, dato2, resultado;

dato1 = 20;

dato2 = 10;

//Suma

resultado = dato1 + dato2;

System.Console.WriteLine("{0}+{1}={2}", dato2, dato2, resultado);

//Resta

resultado = dato1 - dato2;

System.Console.WriteLine("{0}-{1}={2}", dato2, dato2, resultado);

//Producto

resultado = dato1 * dato2;

System.Console.WriteLine("{0}*{1}={2}", dato2, dato2, resultado);

//Cociente

resultado = dato1 / dato2;

System.Console.WriteLine("{0}/{1}={2}", dato2, dato2, resultado);

}

}

1.5.‐SENTENCIAIF….ELSE.

La sentencia if …else ejecuta una sentencia, simple una o ninguna vezdependiendodelvalordeunexpresión.Susintaxiseslasiguiente:

If(condición)

Page 13: Moises Valenzuela Gutierrez-fundamentos de Programacion

13

Sentencia1

else

sentencia2;

Ejemplo1:

Crea un programa que introduzca tres índices de polución de una ciudad endistintoslugaresdedichaciudadyqueelprogramaaverigüélamediadedichosíndicestomadosyquesisuperaelíndicemáximade50,nosmuestreporpantallaquenosencontramosanteunasituaciónderiesgoysinoquenosencontramosensituaciónsegura.

class Polucion

{

static void Main(string[] args)

{

const int corte = 50;

int indice1, indice2, indice3, media;

Console.WriteLine("Introduce el indice de polucion 1:");

indice1 = Int32.Parse(Console.ReadLine());

Console.WriteLine("Introduce el indice de polucion 2:");

indice2 = Int32.Parse(Console.ReadLine());

Console.WriteLine("Introduce el indice de polucion 3:");

indice3 = Int32.Parse(Console.ReadLine());

media = (indice1 + indice2 + indice3) / 3;

Console.WriteLine("El indice de polucion medio es:", +media);

if (media > corte)

Console.WriteLine("Situacion de alerta");

else

Page 14: Moises Valenzuela Gutierrez-fundamentos de Programacion

14

Console.WriteLine("Situacion segura");

}

}

1.6.‐SENTENCIASWITCH.

Permiteejecutarunadevariasacciones,enfuncióndelvalordeunaexpresión.Esuna sentencia especial para decisiones múltiples. La sintaxis para utilizar estasentenciaes.

switch(expresión)

{

caseexpresión‐constante1:

[sentencia1:]

[caseexpresión‐constante2:]

[sentencia2:]

[caseexpresión‐constante3:]

[sentencia3:]

[default:]

[sentencian:]

}

Donde expresión es una expresión de tipo entero, enumerado o string yexpresión‐constanteesunaconstantedelmismotipoqueexpresiónodeuntipoque se pueda convertir implícitamente al tipode expresión; y sentencia es unasentencia simple o compuesta. En el caso de que se trate de una sentenciacompuesta,nohacefaltaincluirlassentenciassimplesquelaformanentre{}

Elsiguienteejemplodacomoresultadolosdíascorrespondientesalmes:

Page 15: Moises Valenzuela Gutierrez-fundamentos de Programacion

15

switch (mes)

case 1: case 2: case 5: case 7: case 8: case 10: case 12:

dias = 31;

break;

case 4: case 6: case 8: case 11:

dias =30;

case 2:

// ¿Es el año bisiesto?

if ((año%4 ==0) && (año %100 ¡=0) || (año%400==0))

días = 29;

else

dias = 28;

break;

default:

System.Console.WriteLine( “\n El mes no es valido”);

break;

}

Page 16: Moises Valenzuela Gutierrez-fundamentos de Programacion

16

ACTIVIDADES.

Ejercicio1:

Modicfica el ejercicio anterior modificandolo para que ahora realice lasoperaciones de sumar, restar y multiplicar con tres datos: dato1, dato2, dato3.GuardalocomoOperacionesAritmeticas2.

Ejercicio2:

Programaelejercicioanterior,introduciendounmesyunaño.Apareciendoporpantallaelnúmerodedíasqtienedichomes.

Ejercicio3:

Realizaelejercicio7(temperaturasydeporte)conlasentenciadecontrolSwitchcase.

Nota:Utilizatemperaturasfijasparalarealizacióndelejercicio.

Page 17: Moises Valenzuela Gutierrez-fundamentos de Programacion

17

1.7.‐SENTENCIAWHILE.

LasentenciaWhileejecutaunasentencia,simpleocompuesta,ceroomasveces,dependiendodelvalordeunaexpresiónbolean.Suexpresiónes:

while(condición)

sentencia;

dondecondiciónescualquierexpresiónbooleanaysentenciaesunasentenciasimpleocompuesta.

Laejecucióndelasentenciawhilesucedeasí:

1.‐Seevalúalacondiciónyseobtieneunresultadoverdaderoofalso.

2.‐Sielresultadoesfalso(false),lasentencianoseejecutaysepasaelcontrolalasiguienteenelprograma.

3.‐Sielresultadodelaevaluaciónesverdadero(true),seejecutalasentenciayelprocesodescritoserepitedesdeelpunto1.

Ejemplo1:

Realizarunprogramaqueatravésdeunmenúpermitarealizar lasoperacionesdesumar,restar,multiplicar,dividirysalir.Lasoperacionesconstaransolamentededosoperandos.

class sumarmultiplicar

{

static void Main(string[] args)

{

int numero1 = 0;

int numero2 = 0;

int resultado = 0;

Page 18: Moises Valenzuela Gutierrez-fundamentos de Programacion

18

int opcion = 0;

while (opcion != 5)

{

Console.WriteLine("Introduce primer numero: ");

numero1 = Int32.Parse(Console.ReadLine());

Console.WriteLine("Introduce segundo numero: ");

numero2 = Int32.Parse(Console.ReadLine());

Console.Clear();

Console.WriteLine("==========================");

Console.WriteLine("1.-Sumar");

Console.WriteLine("2.-Restar");

Console.WriteLine("3.-Multiplicar");

Console.WriteLine("4.-Dividir");

Console.WriteLine("5.-Salir");

Console.WriteLine("Elige opcion");

opcion = Int32.Parse(Console.ReadLine());

if (opcion == 1)

{

resultado = numero1 + numero2;

Console.WriteLine("El resultado de la operacion es: " + resultado);

}

else if (opcion == 2)

{

resultado = numero1 - numero2;

Console.WriteLine("El resultado de la operacion es: " + resultado);

}

else if (opcion == 3)

{

Page 19: Moises Valenzuela Gutierrez-fundamentos de Programacion

19

resultado = numero1 * numero2;

Console.WriteLine("El resultado de la operacion es: " + resultado);

}

else if (opcion == 4)

{

resultado = numero1 / numero2;

Console.WriteLine("El resultado de la operacion es: " + resultado);

}

else if (opcion == 5)

Console.WriteLine("Usted ha elegido la opcion salir. !Hasta otra!");

else

Console.WriteLine("Ha escogido una opcion equivocada");

}

}

}

1.6.‐SENTENCIADO….WHILE.

La sentenciado…while ejecuta una sentencia, simple o compuesta, una omasvecesdependiendodelvalordeunexpresión.Susintaxiseslasiguiente:

do

sentencia;

while(condición);

Page 20: Moises Valenzuela Gutierrez-fundamentos de Programacion

20

donde condición es cualquier expresión booleana y sentencia es una sentenciasimpleocompuesta.Observequelasentenciado…whilefinalizaconunpuntoycoma.

Ejemplo1:

Si quiere averiguar tu numero de Tarot, suma los números de tu fecha denacimientoyacontinuaciónredúcelosaunúnicodigito;porejemplositufechadenacimientoes17deoctubrede1980loscálculosarealizarserian:

17+10+1970=1+9+9+7=26‐>2+6=8

loquequieredecirquetunumerodetarotesel8.

Realizaunprogramaquepidaunafechadía,mesyaño(sonenteros)ydecómoresultadoelnumerodetarot.Elprogramaverificarasi lafechaescorrecta,estoes,losvaloresestándentrodelosrangospermitidos.

class tarot

{

static void Main(string[] args)

{

int dia = 0;

int mes = 0;

int año = 0;

int suma = 0;

int div = 0;

do

{

Console.WriteLine("Introduce dia: ");

dia = Int32.Parse(Console.ReadLine());

}

while (dia < 1 || dia > 31);

Page 21: Moises Valenzuela Gutierrez-fundamentos de Programacion

21

do

{

Console.WriteLine("Introduce mes: ");

mes = Int32.Parse(Console.ReadLine());

}

while (mes < 1 || mes > 12);

do

{

Console.WriteLine("Introduce año: ");

año = Int32.Parse(Console.ReadLine());

}

while (año < 1900 || año > 2007);

suma = dia + mes + año;

do

{

for (int i = 3; i >= 0; i--)

{

div += suma / (int)Math.Pow(10, i);

suma = suma % (int)Math.Pow(10, i);

}

suma = div;

div = 0;

}

while (suma > 9);

Console.WriteLine("Su numero de Tarot es: " + suma);

}

}

Page 22: Moises Valenzuela Gutierrez-fundamentos de Programacion

22

1.7.‐SENTENCIAFOR.

Sentenciafor

La sentencia for permite ejecutar una sentencia simple o compuesta,repetidamenteunnumerodevecesconocido.

Porejemplolasentenciaforsiguienteimprimelosnúmerosdel1al50.

inti;

for(i=1;i<=50;i++)

System.Console.Write(i+““);

1.8.‐MATRICES.

Unamatriz es un conjunto de elementos seguidos, todos del mismo tipo quecompartenunnombrecomún.

Ladeclaracióndeunamatrizdeunadimensiónsehacedelaformasiguiente:

tipo[]nombre;

Ejemplos:

int[]m;

float[]temperatura;

Paracrearlaseria,medianteelejemplosiguiente:

nombre=newtipo[tamaño];

dondenombreeselnombredelamatrizpreviamentedeclarada;tipoeseltipodeloselementosdelamatriz,ytamañoesunaexpresiónenterapositiva.

Parainiciarlaseriadelasiguienteforma:

float[]temperatura=newfloat[5](10.2,12.3,3.4,14.5,16.7);

Page 23: Moises Valenzuela Gutierrez-fundamentos de Programacion

23

Paraaccedealoselementosdeunamatriz:

int[]m=newint[100]

intk=0,a=0;

a=m[1]+m[99];

Matricesmultidimensionales

Puedenserdevariasdimensiones.

Ejemplo1:

int[,]m=newint[2,3];

EJEMPLOSRESUELTOS.

Ejemplo1:

Page 24: Moises Valenzuela Gutierrez-fundamentos de Programacion

24

Realizaahoraunprogramaque lea lanotamediaobtenidaporcadaalumnodeundeterminadocurso, lasalmaceneenunamatrizydecómoresultado lanotamediadelcurso.

class Program

{

static void Main(string[] args)

{

int nAlumnos;

do

{

Console.WriteLine("Numero de alumnos: ");

nAlumnos = Int32.Parse(Console.ReadLine());

}

while (nAlumnos < 1);

float[] nota = new float[nAlumnos]; //creo la matriz nota.

int i = 0; //subindice

float suma = 0; //Suma total de las notas medias

Console.WriteLine("Introducir las notas medias del curso: ");

for (i=0;i<nota.Length;i++)

{

Console.WriteLine("Nota media del alumno:" + (i+1)+":");

nota[i]=Int32.Parse(Console.ReadLine());

}

//Sumar las notas medias

for (i=0;i<nota.Length;i++)

Page 25: Moises Valenzuela Gutierrez-fundamentos de Programacion

25

suma+=nota[i];

//Visualizar la nota media del curso.

Console.WriteLine("\n\nNota media del curso: "+ suma/nAlumnos);

Ejemplo2:

Un estudio demográfico del áreametropolitana de una determinada ciudad ladivide en tres regiones (urbana, semiurbana y rural), y han publicado la tablasiguiente, mostrando la migración anual de una región a otra (los numerosrepresentanporcentajes):

Urbana Semiurbana Rural

Urbana 1,1 0,3 0,7

Semiurbana 0,1 1,2 0,3

Rural 0,2 0,6 1,3

Por ejemplo el 0,3 por ciento de los urbanos emigran cada año a las zonasresidenciales del exterior de la ciudad (es decir, a la zona semiurbana). Loselementos de la diagonal principal representan el crecimiento interno de cadazona.Escribeunprogramaque,utilizandounarraybidimensionalcuyosíndicespertenezcan a un tipo enumerado, determine la población de cada regióndespuésde10,20,30,40y50años.Supónquelaspoblacionesactualesdelasáreasurbanas, semiurbanas y rurales son 2,1 millones, 1,4 millones y 0,9 millonesrespectivamente.

namespace demografia

{

class Program

{

static void Main(string[] args)

{

//ESTUDIO DEMOGRAFICO SOBRE LOS MOVIMIENTOS DE POBLACION EN UN AREA

Page 26: Moises Valenzuela Gutierrez-fundamentos de Programacion

26

//METROPOLITANA Y DURANTE UNA DETERMINADA EPOCA.

int opcion = 0; //Se utiliza para el menu principal.

int opcion1=0; //Para los submenus(años).

double poblacionurbana=2100000;

double poblacionsemiurbana=1400000;

double poblacionrural=900000;

double poblacion=0;

double porcentaje=0;

//Array bidimensional para introducir los porcentajes.

double[,] porciento = new double[3, 3];

//Obviamos los movimientos internos que no suponen cambios.

porciento[0, 1] = 0.3;

porciento[0, 2] = 0.7;

porciento[1, 0] = 0.1;

porciento[1, 2] = 0.3;

porciento[2, 0] = 0.2;

porciento[2, 1] = 0.6;

//Menu para escoger el area donde queremos hacer el estudio.

do

{

Console.WriteLine("=======================");

Console.WriteLine("1.- Area Urbana.");

Console.WriteLine("2.- Area SemiUrbana.");

Console.WriteLine("3.- Area Rural.");

Page 27: Moises Valenzuela Gutierrez-fundamentos de Programacion

27

Console.WriteLine("4.- Salir del programa.");

Console.WriteLine("Elige la opcion para realizar el estudio: ");

Console.WriteLine("=======================");

opcion = Int32.Parse(Console.ReadLine());

Console.Clear();

switch (opcion)

{

case 1:

{

do

{

Console.WriteLine("Elige año para realizar estudio.");

Console.WriteLine("1.-Poblacion en año 2017.");

Console.WriteLine("2.-Poblacion en año 2027.");

Console.WriteLine("3.-Poblacion en año 2037.");

Console.WriteLine("4.-Poblacion en año 2047.");

Console.WriteLine("5.-Poblacion en año 2057.");

Console.WriteLine("6.-Terminar.");

Console.WriteLine("Elige opcion:");

opcion1 = Int32.Parse(Console.ReadLine());

switch (opcion1)

{

case 1:

{

porcentaje = porciento[0, 1] + porciento[0, 2] - porciento[1, 0] - porciento[2, 0];

Page 28: Moises Valenzuela Gutierrez-fundamentos de Programacion

28

poblacion = (poblacionurbana / 100) * porcentaje;

poblacionurbana = poblacionurbana - poblacion;

Console.Clear();

Console.WriteLine("Poblacion en 2017:" + poblacionurbana + " habitantes.");

break;

}

case 2:

{

poblacion = poblacion * 2;

poblacionurbana = poblacionurbana - poblacion;

Console.Clear();

Console.WriteLine("Poblacion en 2027: " + poblacionurbana + " habitantes.");

break;

}

case 3:

{

poblacion = poblacion * 3;

poblacionurbana = poblacionurbana - poblacion;

Console.Clear();

Console.WriteLine("Poblacion en 2037: " + poblacionurbana + " habitantes.");

break;

}

case 4:

Page 29: Moises Valenzuela Gutierrez-fundamentos de Programacion

29

{

poblacion = poblacion * 4;

poblacionurbana = poblacionurbana - poblacion;

Console.Clear();

Console.WriteLine("Poblacion en 2047: " + poblacionurbana + " habitantes.");

break;

}

case 5:

{

poblacion = poblacion * 5;

poblacionurbana = poblacionurbana - poblacion;

Console.WriteLine();

Console.WriteLine("Poblacion en 2037: " + poblacionurbana + " habitantes.");

Console.Clear();

break;

}

case 6:

{

Console.Clear();

Console.WriteLine("Termina el estudio zona urbana");

break;

}

default:

{

Console.Clear();

Console.WriteLine("Error, opcion introducida incorrecta.");

Page 30: Moises Valenzuela Gutierrez-fundamentos de Programacion

30

break;

}

}

} while (opcion1 != 6);

Console.Clear();

break;

}

case 2:

{

do

{

Console.WriteLine("Elige año para realizar estudio.");

Console.WriteLine("1.-Poblacion en año 2017.");

Console.WriteLine("2.-Poblacion en año 2027.");

Console.WriteLine("3.-Poblacion en año 2037.");

Console.WriteLine("4.-Poblacion en año 2047.");

Console.WriteLine("5.-Poblacion en año 2057.");

Console.WriteLine("6.-Terminar.");

Console.WriteLine("Elige opcion:");

opcion1 = Int32.Parse(Console.ReadLine());

switch (opcion1)

{

case 1:

{

Page 31: Moises Valenzuela Gutierrez-fundamentos de Programacion

31

porcentaje = porciento[0, 1] + porciento[2, 1] - porciento[1, 0] - porciento[1, 2];

poblacion = (poblacionsemiurbana / 100) * porcentaje;

poblacionsemiurbana = poblacionsemiurbana + poblacion;

Console.Clear();

Console.WriteLine("Poblacion en 2017:" + poblacionsemiurbana + " habitantes.");

break;

}

case 2:

{

poblacion = poblacion * 2;

poblacionsemiurbana = poblacionsemiurbana + poblacion;

Console.Clear();

Console.WriteLine("Poblacion en 2027: " + poblacionsemiurbana + " habitantes.");

break;

}

case 3:

{

poblacion = poblacion * 3;

poblacionsemiurbana = poblacionsemiurbana + poblacion;

Console.Clear();

Console.WriteLine("Poblacion en 2037: " + poblacionsemiurbana + " habitantes.");

break;

}

case 4:

Page 32: Moises Valenzuela Gutierrez-fundamentos de Programacion

32

{

poblacion = poblacion * 4;

poblacionsemiurbana = poblacionsemiurbana + poblacion;

Console.Clear();

Console.WriteLine("Poblacion en 2047: " + poblacionsemiurbana + " habitantes.");

break;

}

case 5:

{

poblacion = poblacion * 5;

poblacionsemiurbana = poblacionsemiurbana + poblacion;

Console.Clear();

Console.WriteLine("Poblacion en 2037: " + poblacionsemiurbana + " habitantes.");

break;

}

case 6:

{

Console.Clear();

Console.WriteLine("Termina el estudio zona SemiUrbana");

break;

}

default:

{

Console.Clear();

Page 33: Moises Valenzuela Gutierrez-fundamentos de Programacion

33

Console.WriteLine("Error, opcion introducida incorrecta.");

break;

}

}

} while (opcion1 != 6);

Console.Clear();

break;

}

case 3:

{

do

{

Console.WriteLine("Elige año para realizar estudio.");

Console.WriteLine("1.-Poblacion en año 2017.");

Console.WriteLine("2.-Poblacion en año 2027.");

Console.WriteLine("3.-Poblacion en año 2037.");

Console.WriteLine("4.-Poblacion en año 2047.");

Console.WriteLine("5.-Poblacion en año 2057.");

Console.WriteLine("6.-Terminar.");

Console.WriteLine("Elige opcion:");

opcion1 = Int32.Parse(Console.ReadLine());

switch (opcion1)

{

Page 34: Moises Valenzuela Gutierrez-fundamentos de Programacion

34

case 1:

{

porcentaje = porciento[0, 2] + porciento[1, 2] - porciento[2, 0] - porciento[2, 1];

poblacion = (poblacionrural / 100) * porcentaje;

poblacionrural = poblacionrural + poblacion;

Console.Clear();

Console.WriteLine("Poblacion en 2017:" + poblacionrural + " habitantes.");

break;

}

case 2:

{

poblacion = poblacion * 2;

poblacionrural = poblacionrural + poblacion;

Console.Clear();

Console.WriteLine("Poblacion en 2027: " + poblacionrural + " habitantes.");

break;

}

case 3:

{

poblacion = poblacion * 3;

poblacionrural = poblacionrural + poblacion;

Console.Clear();

Console.WriteLine("Poblacion en 2037: " + poblacionrural + " habitantes.");

Page 35: Moises Valenzuela Gutierrez-fundamentos de Programacion

35

break;

}

case 4:

{

poblacion = poblacion * 4;

poblacionrural = poblacionrural + poblacion;

Console.Clear();

Console.WriteLine("Poblacion en 2047: " + poblacionrural + " habitantes.");

break;

}

case 5:

{

poblacion = poblacion * 5;

poblacionrural = poblacionrural + poblacion;

Console.Clear();

Console.WriteLine("Poblacion en 2037: " + poblacionrural + " habitantes.");

break;

}

case 6:

{

Console.Clear();

Console.WriteLine("Termina el estudio zona Rural");

break;

}

default:

Page 36: Moises Valenzuela Gutierrez-fundamentos de Programacion

36

{

Console.Clear();

Console.WriteLine("Error, opcion introducida incorrecta.");

break;

}

}

} while (opcion1 != 6);

Console.Clear();

break;

}

default:

{

Console.Clear();

Console.WriteLine("Final");

break;

}

}

} while (opcion != 4);

}

}

}

Ejemplo3:

Programaque introduciendounnumerodeempleado, lashoras trabajadasy latarifa horaria, calcule el salario como horas* tarifa para un número de horastrabajadas y una tarifa horaria de algunos empleados. Tiene que mostrar por

Page 37: Moises Valenzuela Gutierrez-fundamentos de Programacion

37

pantalla el número de empleado, número de horas trabajadas, tipo de tarifa ysalariototal.

Trabajarde8delamañanaa8delatarde=7euroslahora.Tarifa1

Trabajarde8delanochea8delamañana=12euroslahora.Tarifa2.

class Trabajador

{

static void Main(string[] args)

{

int Numempleado, horastrabajadas, salario, tarifahoraria = 0;

Console.WriteLine("Introduce numero de empleado: ");

Numempleado = Int32.Parse(Console.ReadLine());

Console.WriteLine("Introduce numero de horas trabajadas: ");

horastrabajadas = Int32.Parse(Console.ReadLine());

Console.WriteLine("Introduce tarifa horaria(1-dia..2-noche): ");

tarifahoraria = Int32.Parse(Console.ReadLine());

if (tarifahoraria==1)

salario= horastrabajadas*7;

else

salario= horastrabajadas*12;

Console.WriteLine("=================================");

Console.WriteLine("Numero de empleado:" +Numempleado);

Console.WriteLine("Numero de horas trabajadas:" +horastrabajadas+ " horas");

if (tarifahoraria==1)

Console.WriteLine("Tarifa Diurna.");

else

Console.WriteLine("Tarifa Nocturna.");

Page 38: Moises Valenzuela Gutierrez-fundamentos de Programacion

38

Console.WriteLine("Salario total del dia:"+salario+ " euros.");

Console.WriteLine("==================================");

}

}

Ejemplo4:

Escribir un programa que pida una temperatura para, seguidamente,visualizar/escribir el deporte apropiado para dicha temperatura según elsiguientecriterio:

• Natación:masde30grados.• Tenis:masde25grados.• Golf:masde20grados.• Esquí:masde5grados.• Ajedrez:hasta5grados.

Nota: Los topes de temperaturas para cada deporte son los mínimos para eldeporteanterior.

class temperatura

{

static void Main(string[] args)

{

int temperatura = 0;

Console.WriteLine("Introduzca temperatura: ");

Page 39: Moises Valenzuela Gutierrez-fundamentos de Programacion

39

temperatura = Int32.Parse(Console.ReadLine());

if (temperatura > 30)

Console.WriteLine(" El deporte a realizar es Natacion.");

else if (temperatura > 25)

Console.WriteLine(" El deporte a realizar es Tenis.");

else if (temperatura>20)

Console.WriteLine("El deporte a realizar es Golf.");

else if (temperatura>5)

Console.WriteLine("El deporte a realizar es Esqui");

else

Console.WriteLine("¡¡¡¡¡Quedate en casa y juega al Ajedrez!!!!!!!");

}

}

Ejemplo5:

LatarifadeunTAXIeslasiguiente:

• Unacantidadfijade20euros,sinosesobrepasanlos30km.• Paramasde30km,seconsideraranlossiguientessupuestos:

o Sinose sobrepasan los 100km, 1europorkm,queexcedade los30,ademásdelos20euros.

o Sisobrepasalos100km,0,50céntimosporkmqueexcedadelos100,1europorkmdesdelos30alos100ylos20euros.

Diseñarunprogramaquepidaloskilómetrosrecorridosycalculeeltotalapagarsegúnlatarifaanterior.

class taxi

{

static void Main(string[] args)

{

const int tarifa30= 20;

double km, precio = 0;

Page 40: Moises Valenzuela Gutierrez-fundamentos de Programacion

40

Console.WriteLine("================================");

Console.WriteLine("Introduce kilometros recorridos:");

km = Int32.Parse(Console.ReadLine());

if (km <= tarifa30)

Console.WriteLine("El costo del taxi es 20 euros");

else if (km > 30 && km <= 100)

{

km = km - 30;

precio = tarifa30 + (1 * km);

Console.WriteLine("El costo del taxi es:" + precio + "euros");

}

else

{

km = km - 100;

precio = tarifa30 + 70 + (0.50 * km);

Console.WriteLine("El costo del taxi es:" + precio + "euros");

}

}

}

Page 41: Moises Valenzuela Gutierrez-fundamentos de Programacion

41

ACTIVIDADES.

Ejercicio1:

Introducirsalarioseneurosdetalmaneraquenosvisualicealfinal(despuésdehaberintroducidoXsalarios)porpantallaelsalariomáximoyelsalariomínimoyquealintroducirunsalarioiguala0,dejemosdeintroducirsalarios.

Ejercicio2:

Realizar un programa que calcule y visualice la suma de los múltiplos de 5comprendidos entre dos valores a y b. El programa no permitirá introducirvaloresnegativosparaayb,yverificaraqueaesmenosqueb.Siaesmayorqueb,intercambiaraesosvalores.

Ejercicio3:

Realizarunprogramaque leauna listadevalores introducidaporel teclado.Acontinuación,ysobrelalista,buscarlosvaloresmáximoymínimo,yescribirlos.

Ejercicio4:

Elpreciodeunas camisas esde 10 euros cadauna si la compra es superior a 3unidades y de 12 euros en cualquier otro caso.Hacer un programaque pida elnúmerodecamisasacompraryvisualiceelcostetotal

Ejercicio5:

Page 42: Moises Valenzuela Gutierrez-fundamentos de Programacion

42

Escribeunprogramacomoeldelejercicio5,peroconlamodificacióndequesielnumero de empleado es mayor a 1000, el programa leerá un salario anual ycalculara la paga semanal del empleadodividiendodicho salario entre 52. Si elnumerodeempleadoesmenorque1000,elsalariosecalcularaenbasealatarifahoraria,comoenelejercicioanterior.Siesanualseaplicaratarifadiaria.

Ejercicio6:

Modificaelejercicio8demaneraqueseapliquendostarifassiesjubiladotendráun20%dedescuentosobrelatarifabaseyporotroladoapartirdelkilómetro100y siendomenor a 200 para los jubilados la tarifa será gratis para ese intervalo.Realizaelprogramateniendoencuentaestasalvedad.

Ejercicio7:

Tenemosunaempresaquenecesitaincorporarasuplantillavariosempleadosendiversos departamentos. Se reciben multitud de Currículo Vitae y se intentameterenunapequeñaaplicaciónpararealizarunaprimeraselecciónyenbaseasuresultado,comprobaremossiesaptoonoaptoparaoptaralcargo.

• Necesitalaempresa:o Unadministrativo.o Untransportista.o Dosoperarios.o Tresguardiasdeseguridad.

• Paratodoslospuestostienenquetener18años• Paraadministrativoytransportistapuedentenerhasta55años.• Paraoperariosnopuedensuperarlos50años.• Paraguardiadeseguridadnopuedensuperarlos45años.• Para administrativo se requiere el Ciclo superior en Administración y

Finanzas.• ParalosdemáspuestoseltitulodelaESO.

Una vez haya superado los requerimientos anteriores, introduciremos elnombre,apellidos,direcciónynúmerodeDNI.

Ejercicio8:

Escribeunprogramaparapredecireltiempoquevaahacermañanaapartir

devariosdatosatmosféricossuministradosporelusuario.Estosdatosson:

Page 43: Moises Valenzuela Gutierrez-fundamentos de Programacion

43

a.Lapresiónatmosférica:puedeseralta,mediaobaja.

b.Lahumedadrelativa:tambiénpuedeseralta,mediaobaja

Tienesquecalcularlaprobabilidaddelluvia,laprobabilidaddesolyla

probabilidaddequehagafrío,medianteestoscálculos:

Paracalcularlaprobabilidaddelluvia:

Presión Humedad Probabilidaddelluvia

Baja Alta Muyalta

Baja Media alta

Baja Baja alta

Media Media media

Encualquierotrocaso baja

Paracalcularlaprobabilidaddequehagasol:

Presión Humedad Probabilidaddesol

Baja Alta Baja

Baja Media Media

Baja Alta Media

Media Media Media

Encualquierotrocaso Alta

Page 44: Moises Valenzuela Gutierrez-fundamentos de Programacion

44

Paracalcularlaprobabilidaddequehagafrió:

Presión Humedad Probabilidaddefrió

Baja Alta Alta

Baja Media Alta

Media Alta Alta

Media Media Media

Encualquierotrocaso Baja

Presentaporpantallalosresultadosdeltiempoquevahacer.

TEMA2.CLASESYOBJETOS.

2.1.INTRODUCCIONACLASES.

C#esunlenguajeorientadoaobjetos,portantosusprogramassecomponensolodeobjetos.

TodoprogramaC#está formadoporalmenosunaclasequedefineunmetodonombradoMain:

Page 45: Moises Valenzuela Gutierrez-fundamentos de Programacion

45

UnaclasequecontieneunmétodoMainesunaplantillaparacrearloquevamosadenominarobjetoprincipal,objetoquetienecomomisióniniciaryfinalizarlaejecucióndelprograma.PrecisamenteelmétodoMaineselpuntodeentradaydesalidadelprograma.

Paradefinirunaclaseseutilizalasintaxissiguiente:

[public|private|protected|internal]

classnombre‐clase

{

//atributosymétodosdelaclase

}

o Unaclaseconniveldeproteccióninternalsolopuedeserutilizadaporlasclasesdesumismoproyecto.

o Unaclaseconniveldeprotecciónpublicpuedeserutilizadaporcualquierotraclasedeotroproyecto.

o Una clase con nivel de protecciónprivate es accesible solamente desdedentrodesucontextodedeclaración.

o Unaclaseconniveldeprotecciónprotectedesaccesiblesolamentedesdedentrodesupropiadeclaraciónodesdeunaclasederivada.

2.2.METODOS.

Unprogramaorientadoaobjetossecomponesolamentedeobjetos.Cadaunodeellosesunaentidadquetieneunaspropiedadesparticulares,losatributos,yunasformasdeoperarsobreellos,losmétodos.,sonborrados.

2.3.DISEÑODEUNACLASEDEOBJETOS.

Vamosairexplicandoelsignificadodemétodos,atributos,objetosmedianteunejemplo:

Laclaseseiniciacon:

classCCoche

{

Page 46: Moises Valenzuela Gutierrez-fundamentos de Programacion

46

//Cuerpodelaclase:atributosymétodos.

}

Ejemplo1:

Diseña una clase CCoche que represente coches. Incluye los atributos marca,modeloycolor;y losmétodosquesimulen,enviandomensajes, lasaccionesdearrancarelmotor,cambiardevelocidad,acelerar,frenaryparaelmotor.

public class Coche

{

//Variables globales que se utilizan para la clase.

private string m_color;

private string m_marca;

private string m_tipo;

private int marcha;

//Ejecucion de todos los metodos de la clase.

public string Color

{

get

{

return m_color;

}

set

{

if (value == null)

{

m_color = "color desconocido";

}

Page 47: Moises Valenzuela Gutierrez-fundamentos de Programacion

47

else

{

m_color = value;

}

}

}

public string Marca

{

get

{

return m_marca;

}

set

{

if (value == null)

{

m_marca = "marca desconocida";

}

else

{

m_marca = value;

}

}

}

public string Tipo

{

get

{

return m_tipo;

}

Page 48: Moises Valenzuela Gutierrez-fundamentos de Programacion

48

set

{

if (value == null)

{

m_tipo = "marca desconocida";

}

else

{

m_tipo = value;

}

}

}

public void ArrancarMotor()

{

System.Console.WriteLine("BRrrrrrrrrummmmm...");

}

public void Acelerar()

{

System.Console.WriteLine("Acelerando...");

}

public void SubirMarcha()

{

if (marcha < 5)

{

marcha = marcha + 1;

}

System.Console.WriteLine("Marcha: " + marcha);

}

Page 49: Moises Valenzuela Gutierrez-fundamentos de Programacion

49

public void BajarMarcha()

{

if (marcha > -1)

{

marcha = marcha - 1;

}

// -1 = marcha atras

System.Console.WriteLine("Marcha: " + marcha);

}

public void Frenar()

{

System.Console.WriteLine("Frenando...");

}

public void PararMotor()

{

System.Console.WriteLine("Motor parado.");

}

public void DescribirCoche()

{

System.Console.WriteLine(" -- Mi coche es un " + Marca + " " + Color + " " + Tipo);

}

static void Main(string[] args)

{

//Creacion del objeto micoche a traves de la clase Coche, que se encuentra

//misma plantilla.

Page 50: Moises Valenzuela Gutierrez-fundamentos de Programacion

50

Coche micoche=new Coche();

//LLamada a los metodos por asignacion.

micoche.Marca = "BMW";

micoche.Color = "Negro metalizado";

micoche.Tipo = "descapotable";

//LLamada a los metodos con variablres de entrada y salida.

micoche.ArrancarMotor();

micoche.Acelerar();

micoche.SubirMarcha();

micoche.Acelerar();

micoche.SubirMarcha();

micoche.Acelerar();

micoche.SubirMarcha();

micoche.Frenar();

micoche.BajarMarcha();

micoche.Frenar();

micoche.BajarMarcha();

micoche.Frenar();

micoche.BajarMarcha();

micoche.PararMotor();

micoche.DescribirCoche();

}

}

Page 51: Moises Valenzuela Gutierrez-fundamentos de Programacion

51

ACTIVIDADES.

Ejercicio1:

DiseñaunaclasePersona.Incluirá almenos6atributosyencuantoamétodos(métodos de acciones, sin incluir los métodos de propiedades) incluirá varios(mínimode6métodos)yqueseenglobenenunprocesolinealycontinuoparaelobjetocreadoapartirdelaclasePersona.

Ejercicio2:

VamosadiseñarunaclaseBarco.Incluiráunaseriedeatributosintroducidosporteclado(noseránporasignación),losatributospodránser:

• Nombrebarco.• Tipodebarco(barca,zodiac,yate,….).• Numerodetripulantesquepuedealbergar.• Longituddelbarco• Yotrostresatributosquecreasconveniente.

Page 52: Moises Valenzuela Gutierrez-fundamentos de Programacion

52

A continuación se crearan los métodos por asignación correspondientes a losatributosdetalladosanteriormente,despuéscrearasotros6métodosdeaccionesreferentesalaclase.

TEMA3.CONSTRUCTORESYHERENCIA.

3.1.‐CONSTRUCTOR.

Un constructor es un método especial de una clase que es llamadoautomáticamentesiemprequesecreaunobjetodeesaclase.Sufunciónesiniciarelobjeto.

Siemprequeenunaclasesedefineexplícitamenteunconstructor,elconstructorimplícito(constructorporomisión)esreemplazadoporeste.

Unalíneacomolasiguienteinvocaraalconstructorsinparámetros:

CPersonapersona1=newCPersona();//InvocaalconstructorCPersona

El operador new crea un nuevo objeto, en este caso de la clase CPersona, y acontinuaciónseinvocaalconstructordesuclasepararealizarlasoperacionesdeiniciación que estén programadas. Y una línea como la siguiente invocara alconstructorconcuatroparámetrosdelamismaclase:

Page 53: Moises Valenzuela Gutierrez-fundamentos de Programacion

53

CPersonapersona2=newCPersona(“JuanPérez”,“30años”,Madrid);

3.2.‐HERENCIA.

Laherenciapermitequeunaclaseherede losatributosymétodosdeotraclase(losconstructoresnoseheredan).Estogarantizalareutilizacióndelcódigo.

Conlaherenciatodaslasclasesestánclasificadasenunajerarquíaestricta.Cadaclasetienesusuperclase(laclasesuperiorenlajerarquía,tambiénllamadaclasebase), y cada clasepuede tenerunaomas subclases (las clases inferiores en lajerarquía;tambiénllamadasclasesderivadas).

Lasclasesqueestánenlaparteinferiorenlajerarquíasedicequeheredandelasclasesqueestánenlapartesuperior.

ComoejemplovamosaañadiralprogramaanteriorunanuevaclaseCPersona2que sea subclase de CCPersona. Para ello, editamos un nuevo ficheroCPersona2.csyescribimos:

ClassCPersona2:CPersona

{

}

3.2.1.‐Jerarquíadeclases.

Una subclase puede asimismo ser un superclase de otra clase, y asísucesivamente.Enlasiguientefigurasepuedeverestoconclaridad:

Page 54: Moises Valenzuela Gutierrez-fundamentos de Programacion

54

PodemosaplicarparamanipularlasubclaseCPersona1delasuperclaseCPersonao la subclaseCPersona3de la superclaseCPersona1 son lasmismas que hemosaplicadoanteriormenteparalasubclaseCPersona1delasuperclaseCPersona,ylomismodiremosparacualquierotrasubclasequedeseemosañadir.

classCPersona1:CPersona

{

//Atributos

//Métodos.

}

classCPersona2:CPersona1

{

//Atributos.

//Métodos.

Page 55: Moises Valenzuela Gutierrez-fundamentos de Programacion

55

}

ACTIVIDADES.

Ejercicio1:

Crea un nuevo proyecto con una clase principal llamada CAlumno con lossiguientesatributos:

• Nombre• Edad• DNI• Ciudadderesidencia

Acontinuacióncrealosmétodoscorrespondientesparaestosatributosyademásañadelosmétodosdeacciones:

• Alumnoenciendeelequipo.• AlumnoejecutaaplicaciónC#.• Alumnoejecutaejercicio1.• Alumnoejecutaejercicio2.• AlumnoejecutaNavegadorExplorer.• Alumnoentraenpaginawww.youtube.com• Alumnocierratodaslasaplicaciones.• Alumnoapagaequipo.

Page 56: Moises Valenzuela Gutierrez-fundamentos de Programacion

56

CreaunaclasederivadallamadaCAlumno2yquesederivedelaclaseCAlumnoconlossiguientesatributos:

• Altura.• Colordepelo.• Colordeojos.

Crea los métodos correspondientes para estos atributos y además añade losmétodosdeacciones:

• Alumnosaledeclase.• Alumnosubeautobús.• Alumnollegaaparadauno.• Alumnollegaaparadados.• Alumnollegaaparadatres.• Alumnollegaacasa.

Nota: los métodos repetitivos por lógica deben ser implementados en un solométodo.

Ejercicio2:

Creaunnuevoproyecto llamadoCoche incluyendounaclaseprincipal llamadaCCoche1yqueincluyalossiguientesatributos:

• Utilitario,Todoterreno,Monovolumen(añadelosquecreasoportuno).• Marca• PotenciaenCV.• Cilindradaencentímetroscúbicos.• Tipodetracción.(simpleo4ruedas),deberíasutilizarbooleano.

Acontinuaciónañadelossiguientesmétodos.

• Arrancarvehículo.• Vehículosaledegaraje.• Vehículoprimeravelocidad.• Incrementodevelocidad(hastamáximavelocidad).• Decrementarvelocidadhastastop.• Incorporaciónautopista(incrementovelocidades).• Pasarpeajeypagarpeaje(habrástenidoquedecrementarvelocidades).• Seguirautopista(incrementovelocidades).• Salirautopista.

Page 57: Moises Valenzuela Gutierrez-fundamentos de Programacion

57

• Aparcarenzonadescanso• Pararvehículo.

A continuación crea una clase derivada llamada CCoche2 , basada en CCoche1queincorporelosiguiente:

• Navegadorabordo(siono).• Colordelcoche.

FinalmenteincorporaunaterceraclasellamadaCCoche3basadaenCCoche2quesalga de zona de descanso (arrancar coche), entre en autopista incrementevelocidades y finalmente salga de autopista y aparque en hotel (aparcando yparandovehículo).

Nota:Enestecasolaintroduccióndedatos(atributos)seharáporteclado.

Ejercicio6:

Necesitamos realizar sobre una población un nuevo empadronamiento, ya queaún no lo tenemos informatizado. Para ello necesitamos recabar diversainformación sobre cadaunode loshabitantesde lapoblación (nomenosde5atributosasignadosdirectamente).Acontinuaciónserealizarandiversasaccionessobreestasuperclasecreada(implementalasqueconsideresoportunas).

Posteriormente entendemos que hay carencias en el estudio y posteriorimplementaciónde lo realizadoanteriormente ,añadiendonuevos atributos (siesinmigrante,siestaempleado/desempleado,etc..)comprendiendoportantoquesenecesitarancrearnuevosmétodosyseráimplementadoenunanuevaclase.

Page 58: Moises Valenzuela Gutierrez-fundamentos de Programacion

58