Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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.DISEODEUNACLASEDEOBJETOS.
3.1.CONSTRUCTOR.
3.2.HERENCIA.
TEMA1.LENGUAJEC#.
1.1.PROGRAMACIONORIENTADAAOBJETOS.
Clasesyobjetos.
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
existirpreviamenteunaclase,peronoalrevs.
Ejemplo:
classCoche
{
publicCoche(stringmarca,stringmodelo,stringcolor,stringnumbastidor)
{
this.Marca=marca;
this.Modelo=modelo;
this.Color=color;
this.NumBastidor=numbastidor;
}
publicdoubleVelocidad
{
get
{
returnthis.velocidad;
}
}
publicdoublevelocidad=0;
publicstringMarca;
publicstringModelo;
publicstringColor;
publicvoidAcelerar(doublecantidad)
{
//Aquseledicealmotorqueaumentelasrevolucionespertinentes,y..
Console.WriteLine(Incrementandolavelocidaden{0}km/h,cantidad);
this.velocidad=cantidad;
}
publicvoidGirar(doublecantidad)
{
//Aquiraelcdigoparagirar
Console.WriteLine(Girandoelcoche{0}grados,cantidad);
VeamosunaclaseconunmtodoMainparavercomosecomportaraestaclase:
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
MiCoche.Velocidad);
velocidad
actual
es
de
{0}
km/h,
MiCoche.Girar(45);
}
}
Elresultadoqueapareceraenlaconsolaalejecutaresteprogramaseriaesta:
Losdatosdemicocheson:
Marca:Peugeot
Modelo:306
Color:Azul
8
Numerodebastidor:15343534
Incrementadolavelocidaden100km/h
Lavelocidadactualesde100km/h
Girandoelcoche45grados.
Notepreocupespornoentenderelcdigo,yaloiremosviendolargoytendido.
Nosfijamosqueenlaclaseesdondesedefinenlosdatosyseprogramantodaslas
accionesquehandemanejarlosobjetosdeestaclase.LosdatossonVelocidad,
Marca, Modelo, Color y NumBastidor, y los mtodos son Acelerar y Girar. Sin
embargo, el objeto, MiCoche (creado en la primera lnea del mtodo Main) no
defineabsolutamentenada.Simplementeusalainterfazdiseadaenlaclase(la
interfaz de una clase es el conjunto de mtodos y propiedades que esta ofrece
para su manejo). Por lo tanto, Coche es la clase y MiCoche un objeto de esta
clase.
1.2.BASESSINTACTICASDEC#.
AplicacinbsicaHolaatodos!
Como primer contacto con el lenguaje, nada mejor que el tpico programa de
iniciacin Hola a todos! que lo nico que hace al ejecutarse es mostrar por
pantallaelmensajeHolaatodos!Sucdigoes:
1:
2:
3:
4:
5:
6:
7:
classHolaMundo
{
staticvoidMain()
System.Console.WriteLine(Holaatodos!);
}
}
TodoelcdigoescritoenC#sehadeescribirdentrodeunadefinicindeclase,y
lo que en la lnea 1: se dice es que se va a definir una clase (class) de nombre
HolaMundo cuya definicin estar comprendida entre la llave de apertura de la
lnea2:ysucorrespondientellavedecierreenlalnealnea7:
9
Dentrodeladefinicindelaclase(lnea3:)sedefineunmtododenombreMain
cuyocdigoeselindicadoentrelallavedeaperturadelalnea4:ysurespectiva
llavedecierre(lnea6:)Unmtodonoesmsqueunconjuntodeinstruccionesa
las que se les asocia un nombre, de modo que para posteriormente ejecutarlas
bastereferenciarlasporsunombreenvezdetenerquerescribirlas.
La partcula que antecede al nombre del mtodo indica cul es el tipo de valor
quesedevuelvetraslaejecucindelmtodo,yenestecasoesvoidquesignifica
quenosedevuelvenada.Porsuparte,losparntesiscolocadostraselnombredel
mtodo indican cules son los parmetros que ste toma, y el que estn vacos
significa que el mtodo no toma ninguno. Los parmetros de un mtodo
permitenmodificarelresultadodesuejecucinenfuncindelosvaloresquese
lesdencadallamada.
Lapalabrastaticqueantecedealadeclaracindeltipodevalordevueltoesun
modificador del significado de la declaracin de mtodo que indica que el
mtodoestasociadoalaclasedentrodelaquesedefineynoalosobjetosque
secreenapartirdeella.Main()esloquesedenominaelpuntodeentradadela
aplicacin, que no es ms que el mtodo por el que comenzar su ejecucin.
Necesita del modificador static para evitar que para llamarlo haya que crear
algnobjetodelaclasedondesehayadefinido.
Finalmente,lalnea5:contienelainstruccinconelcdigoaejecutar,queloque
se hace es solicitar la ejecucin del mtodo WriteLine() de la clase Console
definidaenelespaciodenombresSystempasndolecomoparmetrolacadena
de texto con el contenido Hola Mundo! Ntese que las cadenas de textos son
secuenciasdecaracteresdelimitadasporcomillasdoblesaunquedichascomillas
no forman parte de la cadena. Por su parte, un espacio de nombres puede
considerarsequeesparalasclasesalgosimilaraloqueundirectorioesparalos
ficheros:unaformadeagruparlas.
1.3.TIPOS.
LostiposenC#seclasificanen:tiposvalorytiporeferencia.Unavariabledeun
tipovaloralmacenadirectamenteunvalor(datosengeneral),mientrasqueuna
variabledeunreferencialoquepermitealmacenaresunareferenciaaunobjeto
(posicindememoriadondeestelobjeto).Porejemplo:
10
intsuma=0;//Sumaalmacenaunentero.
stringcadena=espaa;//Cadenapermitiralmacenarunareferencia
//aunobjetostring
.
1.4.DECLARACIONDEVARIABLES.
tipoidentificador[,identificador]
Enelejemplosedeclarandosvariablesdetipoint,unavariabledetipostringy
dosvariablesdetipostring:
voidvariables()
{
intcontador=0;
stringNombre=;
intdia=20;
Apellidos=Ceballos;
}
Ejemplo1:
Veamos
el
siguiente
OperacionesAritmeticas.
ejercicio.
Guarda
el
proyecto
como
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.
If(condicin)
12
Sentencia1
else
sentencia2;
Ejemplo1:
Crea un programa que introduzca tres ndices de polucin de una ciudad en
distintoslugaresdedichaciudadyqueelprogramaaveriglamediadedichos
ndicestomadosyquesisuperaelndicemximade50,nosmuestreporpantalla
quenosencontramosanteunasituacinderiesgoysinoquenosencontramos
ensituacinsegura.
class Polucion
{
static void Main(string[] args)
{
const int corte = 50;
13
Console.WriteLine("Situacion segura");
}
}
1.6.SENTENCIASWITCH.
Permiteejecutarunadevariasacciones,enfuncindelvalordeunaexpresin.Es
una sentencia especial para decisiones mltiples. La sintaxis para utilizar esta
sentenciaes.
switch(expresin)
{
caseexpresinconstante1:
[sentencia1:]
[caseexpresinconstante2:]
[sentencia2:]
[caseexpresinconstante3:]
[sentencia3:]
[default:]
[sentencian:]
}
Elsiguienteejemplodacomoresultadolosdascorrespondientesalmes:
14
switch (mes)
15
ACTIVIDADES.
Ejercicio1:
Modicfica el ejercicio anterior modificandolo para que ahora realice las
operaciones de sumar, restar y multiplicar con tres datos: dato1, dato2, dato3.
GuardalocomoOperacionesAritmeticas2.
Ejercicio2:
Programaelejercicioanterior,introduciendounmesyunao.Apareciendopor
pantallaelnmerodedasqtienedichomes.
Ejercicio3:
Realizaelejercicio7(temperaturasydeporte)conlasentenciadecontrolSwitch
case.
Nota:Utilizatemperaturasfijasparalarealizacindelejercicio.
16
1.7.SENTENCIAWHILE.
LasentenciaWhileejecutaunasentencia,simpleocompuesta,ceroomasveces,
dependiendodelvalordeunaexpresinbolean.Suexpresines:
while(condicin)
sentencia;
dondecondicinescualquierexpresinbooleanaysentenciaesunasentencia
simpleocompuesta.
Laejecucindelasentenciawhilesucedeas:
1.Seevalalacondicinyseobtieneunresultadoverdaderoofalso.
2.Sielresultadoesfalso(false),lasentencianoseejecutaysepasaelcontrola
lasiguienteenelprograma.
3.Sielresultadodelaevaluacinesverdadero(true),seejecutalasentenciayel
procesodescritoserepitedesdeelpunto1.
Ejemplo1:
Realizar unprogramaqueatravsdeunmenpermitarealizarlasoperaciones
desumar,restar,multiplicar,dividirysalir.Lasoperacionesconstaransolamente
dedosoperandos.
class sumarmultiplicar
{
static void Main(string[] args)
{
int numero1 = 0;
int numero2 = 0;
int resultado = 0;
17
int opcion = 0;
while (opcion != 5)
{
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)
{
18
}
}
}
1.6.SENTENCIADO.WHILE.
do
sentencia;
while(condicin);
19
Ejemplo1:
17+10+1970=1+9+9+7=26>2+6=8
loquequieredecirquetunumerodetarotesel8.
Realizaunprogramaquepidaunafechada,mesyao(sonenteros)ydecmo
resultadoelnumerodetarot.Elprogramaverificarasilafechaescorrecta,esto
es,losvaloresestndentrodelosrangospermitidos.
class tarot
{
static void Main(string[] args)
{
int dia = 0;
int mes = 0;
int ao = 0;
int suma = 0;
int div = 0;
do
{
Console.WriteLine("Introduce dia: ");
dia = Int32.Parse(Console.ReadLine());
}
while (dia < 1 || dia > 31);
20
do
{
Console.WriteLine("Introduce mes: ");
mes = Int32.Parse(Console.ReadLine());
}
while (mes < 1 || mes > 12);
do
{
Console.WriteLine("Introduce ao: ");
ao = Int32.Parse(Console.ReadLine());
}
while (ao < 1900 || ao > 2007);
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);
}
}
21
1.7.SENTENCIAFOR.
Sentenciafor
Porejemplolasentenciaforsiguienteimprimelosnmerosdel1al50.
inti;
for(i=1;i<=50;i++)
System.Console.Write(i+);
1.8.MATRICES.
Una matriz es un conjunto de elementos seguidos, todos del mismo tipo que
compartenunnombrecomn.
Ladeclaracindeunamatrizdeunadimensinsehacedelaformasiguiente:
tipo[]nombre;
Ejemplos:
int[]m;
float[]temperatura;
Paracrearlaseria,medianteelejemplosiguiente:
nombre=newtipo[tamao];
dondenombreeselnombredelamatrizpreviamentedeclarada;tipoeseltipode
loselementosdelamatriz,ytamaoesunaexpresinenterapositiva.
Parainiciarlaseriadelasiguienteforma:
float[]temperatura=newfloat[5](10.2,12.3,3.4,14.5,16.7);
22
Paraaccedealoselementosdeunamatriz:
int[]m=newint[100]
intk=0,a=0;
a=m[1]+m[99];
Matricesmultidimensionales
Puedenserdevariasdimensiones.
Ejemplo1:
int[,]m=newint[2,3];
EJEMPLOSRESUELTOS.
Ejemplo1:
23
Realiza ahora un programa que lea la nota media obtenida por cada alumno de
un determinado curso,lasalmaceneenunamatrizy decmoresultadolanota
mediadelcurso.
class Program
{
static void Main(string[] args)
{
int nAlumnos;
do
{
Console.WriteLine("Numero de alumnos: ");
nAlumnos = Int32.Parse(Console.ReadLine());
}
while (nAlumnos < 1);
24
suma+=nota[i];
//Visualizar la nota media del curso.
Console.WriteLine("\n\nNota media del curso: "+
suma/nAlumnos);
Ejemplo2:
Un estudio demogrfico del rea metropolitana de una determinada ciudad la
divide en tres regiones (urbana, semiurbana y rural), y han publicado la tabla
siguiente, mostrando la migracin anual de una regin a otra (los numeros
representanporcentajes):
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 ao a las zonas
residenciales del exterior de la ciudad (es decir, a la zona semiurbana). Los
elementos de la diagonal principal representan el crecimiento interno de cada
zona.Escribeunprogramaque,utilizandounarraybidimensionalcuyosndices
pertenezcan a un tipo enumerado, determine la poblacin de cada regin
despusde10,20,30,40y50aos.Supnquelaspoblacionesactualesdelasreas
urbanas, semiurbanas y rurales son 2,1 millones, 1,4 millones y 0,9 millones
respectivamente.
namespace demografia
{
class Program
{
static void Main(string[] args)
{
//ESTUDIO DEMOGRAFICO SOBRE LOS MOVIMIENTOS DE POBLACION
EN UN AREA
25
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;
26
switch (opcion1)
{
case 1:
{
porcentaje = porciento[0,
1] + porciento[0, 2] - porciento[1, 0] - porciento[2, 0];
27
poblacion =
(poblacionurbana / 100) * porcentaje;
poblacionurbana =
poblacionurbana - poblacion;
Console.Clear();
break;
}
case 2:
{
poblacion = poblacion * 2;
poblacionurbana =
poblacionurbana - poblacion;
Console.Clear();
break;
}
case 3:
{
poblacion = poblacion * 3;
poblacionurbana =
poblacionurbana - poblacion;
Console.Clear();
break;
}
case 4:
28
{
poblacion = poblacion * 4;
poblacionurbana =
poblacionurbana - poblacion;
Console.Clear();
break;
}
default:
{
Console.Clear();
Console.WriteLine("Error,
opcion introducida incorrecta.");
29
break;
}
}
} while (opcion1 != 6);
Console.Clear();
break;
case 2:
{
do
{
Console.WriteLine("Elige ao para
realizar estudio.");
Console.WriteLine("1.-Poblacion en ao
2017.");
Console.WriteLine("2.-Poblacion en ao
2027.");
Console.WriteLine("3.-Poblacion en ao
2037.");
Console.WriteLine("4.-Poblacion en ao
2047.");
Console.WriteLine("5.-Poblacion en ao
2057.");
Console.WriteLine("6.-Terminar.");
Console.WriteLine("Elige opcion:");
opcion1 =
Int32.Parse(Console.ReadLine());
switch (opcion1)
{
case 1:
{
30
porcentaje = porciento[0,
1] + porciento[2, 1] - porciento[1, 0] - porciento[1, 2];
poblacion =
(poblacionsemiurbana / 100) * porcentaje;
poblacionsemiurbana =
poblacionsemiurbana + poblacion;
Console.Clear();
break;
}
case 3:
{
poblacion = poblacion * 3;
poblacionsemiurbana =
poblacionsemiurbana + poblacion;
Console.Clear();
break;
}
case 4:
31
{
poblacion = poblacion * 4;
poblacionsemiurbana =
poblacionsemiurbana + poblacion;
Console.Clear();
break;
}
case 5:
{
poblacion = poblacion * 5;
poblacionsemiurbana =
poblacionsemiurbana + poblacion;
Console.Clear();
break;
}
case 6:
{
Console.Clear();
Console.WriteLine("Termina
el estudio zona SemiUrbana");
break;
}
default:
{
Console.Clear();
32
Console.WriteLine("Error,
opcion introducida incorrecta.");
break;
}
}
} while (opcion1 != 6);
Console.Clear();
break;
}
case 3:
{
do
{
Console.WriteLine("Elige ao para
realizar estudio.");
Console.WriteLine("1.-Poblacion en ao
2017.");
Console.WriteLine("2.-Poblacion en ao
2027.");
Console.WriteLine("3.-Poblacion en ao
2037.");
Console.WriteLine("4.-Poblacion en ao
2047.");
Console.WriteLine("5.-Poblacion en ao
2057.");
Console.WriteLine("6.-Terminar.");
Console.WriteLine("Elige opcion:");
opcion1 =
Int32.Parse(Console.ReadLine());
switch (opcion1)
{
33
case 1:
{
porcentaje = porciento[0,
2] + porciento[1, 2] - porciento[2, 0] - porciento[2, 1];
poblacion =
(poblacionrural / 100) * porcentaje;
poblacionrural =
poblacionrural + poblacion;
Console.Clear();
break;
}
case 2:
{
poblacion = poblacion * 2;
poblacionrural =
poblacionrural + poblacion;
Console.Clear();
break;
}
case 3:
{
poblacion = poblacion * 3;
poblacionrural =
poblacionrural + poblacion;
Console.Clear();
34
break;
}
case 4:
{
poblacion = poblacion * 4;
poblacionrural =
poblacionrural + poblacion;
Console.Clear();
break;
}
case 5:
{
poblacion = poblacion * 5;
poblacionrural =
poblacionrural + poblacion;
Console.Clear();
break;
}
case 6:
{
Console.Clear();
Console.WriteLine("Termina
el estudio zona Rural");
break;
}
default:
35
{
Console.Clear();
Console.WriteLine("Error,
opcion introducida incorrecta.");
break;
}
}
} while (opcion1 != 6);
Console.Clear();
break;
}
default:
{
Console.Clear();
Console.WriteLine("Final");
break;
}
}
}
}
Ejemplo3:
Programa que introduciendo un numero de empleado, las horas trabajadas y la
tarifa horaria, calcule el salario como horas* tarifa para un nmero de horas
trabajadas y una tarifa horaria de algunos empleados. Tiene que mostrar por
36
class Trabajador
{
static void Main(string[] args)
{
int Numempleado, horastrabajadas, salario, tarifahoraria =
0;
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.");
37
Ejemplo4:
Natacin:masde30grados.
Tenis:masde25grados.
Golf:masde20grados.
Esqu:masde5grados.
Ajedrez:hasta5grados.
Nota: Los topes de temperaturas para cada deporte son los mnimos para el
deporteanterior.
class temperatura
{
static void Main(string[] args)
{
int temperatura = 0;
38
temperatura = Int32.Parse(Console.ReadLine());
}
}
Ejemplo5:
LatarifadeunTAXIeslasiguiente:
Unacantidadfijade20euros,sinosesobrepasanlos30km.
Paramasde30km,seconsideraranlossiguientessupuestos:
o Si no se sobrepasan los 100 km, 1 euro por km, que exceda de los 30,
ademsdelos20euros.
o Sisobrepasalos100km,0,50cntimosporkmqueexcedadelos100,1
europorkmdesdelos30alos100ylos20euros.
Disearunprogramaquepidaloskilmetrosrecorridosycalculeeltotalapagar
segnlatarifaanterior.
class taxi
{
static void Main(string[] args)
{
const int tarifa30= 20;
double km, precio = 0;
39
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");
}
}
}
40
ACTIVIDADES.
Ejercicio1:
Introducirsalarioseneurosdetalmaneraquenosvisualicealfinal(despusde
haberintroducidoXsalarios)porpantallaelsalariomximoyelsalariomnimoy
quealintroducirunsalarioiguala0,dejemosdeintroducirsalarios.
Ejercicio2:
Realizar un programa que calcule y visualice la suma de los mltiplos de 5
comprendidos entre dos valores a y b. El programa no permitir introducir
valoresnegativosparaayb,yverificaraqueaesmenosqueb.Siaesmayorque
b,intercambiaraesosvalores.
Ejercicio3:
Realizar un programa que lea una lista de valores introducida por el teclado. A
continuacin,ysobrelalista,buscarlosvaloresmximoymnimo,yescribirlos.
Ejercicio4:
El precio de unas camisas es de 10 euros cada una si la compra es superior a 3
unidades y de 12 euros en cualquier otro caso. Hacer un programa que pida el
nmerodecamisasacompraryvisualiceelcostetotal
Ejercicio5:
41
Escribeunprogramacomoeldelejercicio5,peroconlamodificacindequesiel
numero de empleado es mayor a 1000, el programa leer un salario anual y
calculara la paga semanal del empleado dividiendo dicho salario entre 52. Si el
numerodeempleadoesmenorque1000,elsalariosecalcularaenbasealatarifa
horaria,comoenelejercicioanterior.Siesanualseaplicaratarifadiaria.
Ejercicio6:
Modificaelejercicio8demaneraqueseapliquendostarifassiesjubiladotendr
un20%dedescuentosobrelatarifabaseyporotroladoapartirdelkilmetro100
y siendo menor a 200 para los jubilados la tarifa ser gratis para ese intervalo.
Realizaelprogramateniendoencuentaestasalvedad.
Ejercicio7:
Tenemosunaempresaquenecesitaincorporarasuplantillavariosempleadosen
diversos departamentos. Se reciben multitud de Currculo Vitae y se intenta
meterenunapequeaaplicacinpararealizarunaprimeraseleccinyenbasea
suresultado,comprobaremossiesaptoonoaptoparaoptaralcargo.
Necesitalaempresa:
o Unadministrativo.
o Untransportista.
o Dosoperarios.
o Tresguardiasdeseguridad.
Paratodoslospuestostienenquetener18aos
Paraadministrativoytransportistapuedentenerhasta55aos.
Paraoperariosnopuedensuperarlos50aos.
Paraguardiadeseguridadnopuedensuperarlos45aos.
Para administrativo se requiere el Ciclo superior en Administracin y
Finanzas.
ParalosdemspuestoseltitulodelaESO.
Ejercicio8:
Escribeunprogramaparapredecireltiempoquevaahacermaanaapartir
devariosdatosatmosfricossuministradosporelusuario.Estosdatosson:
42
a.Lapresinatmosfrica:puedeseralta,mediaobaja.
b.Lahumedadrelativa:tambinpuedeseralta,mediaobaja
Tienesquecalcularlaprobabilidaddelluvia,laprobabilidaddesolyla
probabilidaddequehagafro,medianteestosclculos:
Paracalcularlaprobabilidaddelluvia:
Presin
Humedad
Probabilidaddelluvia
Baja
Alta
Muyalta
Baja
Media
alta
Baja
Baja
alta
Media
Media
media
Encualquierotrocaso
b
a
j
a
Paracalcularlaprobabilidaddequehagasol:
Presin
Humedad
Probabilidaddesol
Baja
Alta
Baja
Baja
Media
Media
Baja
Alta
Media
Media
Media
Media
Encualquierotrocaso
A
l
t
a
43
Paracalcularlaprobabilidaddequehagafri:
Presin
Humedad
Probabilidaddefri
Baja
Alta
Alta
Baja
Media
Alta
Media
Alta
Alta
Media
Media
Media
Encualquierotrocaso
B
a
j
a
Presentaporpantallalosresultadosdeltiempoquevahacer.
TEMA2.CLASESYOBJETOS.
2.1.INTRODUCCIONACLASES.
C#esunlenguajeorientadoaobjetos,portantosusprogramassecomponensolo
deobjetos.
Todo programa C# est formado por al menos una clase que define un metodo
nombradoMain:
44
UnaclasequecontieneunmtodoMainesunaplantillaparacrearloquevamos
adenominarobjetoprincipal,objetoquetienecomomisininiciaryfinalizarla
ejecucin del programa. Precisamente el mtodo Main es el punto de entrada y
desalidadelprograma.
Paradefinirunaclaseseutilizalasintaxissiguiente:
[public|private|protected|internal]
classnombreclase
{
//atributosymtodosdelaclase
}
o Unaclaseconniveldeproteccininternalsolopuedeserutilizadaporlas
clasesdesumismoproyecto.
o Unaclaseconniveldeproteccinpublicpuedeserutilizadaporcualquier
otraclasedeotroproyecto.
o Una clase con nivel de proteccin private es accesible solamente desde
dentrodesucontextodedeclaracin.
o Unaclaseconniveldeproteccinprotectedesaccesiblesolamentedesde
dentrodesupropiadeclaracinodesdeunaclasederivada.
2.2.METODOS.
Unprogramaorientadoaobjetossecomponesolamentedeobjetos.Cadaunode
ellosesunaentidadquetieneunaspropiedadesparticulares,losatributos,yunas
formasdeoperarsobreellos,losmtodos.,sonborrados.
2.3.DISEODEUNACLASEDEOBJETOS.
Vamosairexplicandoelsignificadodemtodos,atributos,objetosmedianteun
ejemplo:
Laclaseseiniciacon:
classCCoche
{
45
//Cuerpodelaclase:atributosymtodos.
}
Ejemplo1:
Disea una clase CCoche que represente coches. Incluye los atributos marca,
modelo y color; y los mtodos que simulen, enviando mensajes, las acciones de
arrancarelmotor,cambiardevelocidad,acelerar,frenaryparaelmotor.
46
else
{
m_color = value;
}
}
}
47
set
{
if (value == null)
{
m_tipo = "marca desconocida";
}
else
{
m_tipo = value;
}
}
}
48
49
micoche.Marca = "BMW";
micoche.Color = "Negro metalizado";
micoche.Tipo = "descapotable";
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();
}
}
50
ACTIVIDADES.
Ejercicio1:
DiseaunaclasePersona.Incluiralmenos6atributosyencuantoamtodos
(mtodos de acciones, sin incluir los mtodos de propiedades) incluir varios
(mnimode6mtodos)yqueseenglobenenunprocesolinealycontinuoparael
objetocreadoapartirdelaclasePersona.
Ejercicio2:
VamosadisearunaclaseBarco.Incluirunaseriedeatributosintroducidospor
teclado(nosernporasignacin),losatributospodrnser:
Nombrebarco.
Tipodebarco(barca,zodiac,yate,.).
Numerodetripulantesquepuedealbergar.
Longituddelbarco
Yotrostresatributosquecreasconveniente.
51
TEMA3.CONSTRUCTORESYHERENCIA.
3.1.CONSTRUCTOR.
Un constructor es un mtodo especial de una clase que es llamado
automticamentesiemprequesecreaunobjetodeesaclase.Sufuncinesiniciar
elobjeto.
Siemprequeenunaclasesedefineexplcitamenteunconstructor,elconstructor
implcito(constructorporomisin)esreemplazadoporeste.
Unalneacomolasiguienteinvocaraalconstructorsinparmetros:
CPersonapersona1=newCPersona();//InvocaalconstructorCPersona
El operador new crea un nuevo objeto, en este caso de la clase CPersona, y a
continuacinseinvocaalconstructordesuclasepararealizarlasoperacionesde
iniciacin que estn programadas. Y una lnea como la siguiente invocara al
constructorconcuatroparmetrosdelamismaclase:
52
CPersonapersona2=newCPersona(JuanPrez,30aos,Madrid);
3.2.HERENCIA.
La herencia permite que una clase herede los atributos y mtodos de otra clase
(losconstructoresnoseheredan).Estogarantizalareutilizacindelcdigo.
Conlaherenciatodaslasclasesestnclasificadasenunajerarquaestricta.Cada
clasetienesusuperclase(laclasesuperiorenlajerarqua,tambinllamadaclase
base), y cada clase puede tener una o mas subclases (las clases inferiores en la
jerarqua;tambinllamadasclasesderivadas).
Lasclasesqueestnenlaparteinferiorenlajerarquasedicequeheredandelas
clasesqueestnenlapartesuperior.
Como ejemplo vamos a aadir al programa anterior una nueva clase CPersona2
que sea subclase de CCPersona. Para ello, editamos un nuevo fichero
CPersona2.csyescribimos:
ClassCPersona2:CPersona
{
3.2.1.Jerarquadeclases.
53
PodemosaplicarparamanipularlasubclaseCPersona1delasuperclaseCPersona
o la subclase CPersona3 de la superclase CPersona1 son las mismas que hemos
aplicadoanteriormenteparalasubclaseCPersona1delasuperclaseCPersona,ylo
mismodiremosparacualquierotrasubclasequedeseemosaadir.
classCPersona1:CPersona
{
//Atributos
//Mtodos.
}
classCPersona2:CPersona1
{
//Atributos.
//Mtodos.
54
ACTIVIDADES.
Ejercicio1:
Crea un nuevo proyecto con una clase principal llamada CAlumno con los
siguientesatributos:
Nombre
Edad
DNI
Ciudadderesidencia
Acontinuacincrealosmtodoscorrespondientesparaestosatributosyadems
aadelosmtodosdeacciones:
Alumnoenciendeelequipo.
AlumnoejecutaaplicacinC#.
Alumnoejecutaejercicio1.
Alumnoejecutaejercicio2.
AlumnoejecutaNavegadorExplorer.
Alumnoentraenpaginawww.youtube.com
Alumnocierratodaslasaplicaciones.
Alumnoapagaequipo.
55
CreaunaclasederivadallamadaCAlumno2yquesederivedelaclaseCAlumno
conlossiguientesatributos:
Altura.
Colordepelo.
Colordeojos.
Crea los mtodos correspondientes para estos atributos y adems aade los
mtodosdeacciones:
Alumnosaledeclase.
Alumnosubeautobs.
Alumnollegaaparadauno.
Alumnollegaaparadados.
Alumnollegaaparadatres.
Alumnollegaacasa.
Nota: los mtodos repetitivos por lgica deben ser implementados en un solo
mtodo.
Ejercicio2:
Crea un nuevo proyecto llamado Coche incluyendo una clase principal llamada
CCoche1yqueincluyalossiguientesatributos:
Utilitario,Todoterreno,Monovolumen(aadelosquecreasoportuno).
Marca
PotenciaenCV.
Cilindradaencentmetroscbicos.
Tipodetraccin.(simpleo4ruedas),deberasutilizarbooleano.
Acontinuacinaadelossiguientesmtodos.
Arrancarvehculo.
Vehculosaledegaraje.
Vehculoprimeravelocidad.
Incrementodevelocidad(hastamximavelocidad).
Decrementarvelocidadhastastop.
Incorporacinautopista(incrementovelocidades).
Pasarpeajeypagarpeaje(habrstenidoquedecrementarvelocidades).
Seguirautopista(incrementovelocidades).
Salirautopista.
56
Aparcarenzonadescanso
Pararvehculo.
Navegadorabordo(siono).
Colordelcoche.
FinalmenteincorporaunaterceraclasellamadaCCoche3basadaenCCoche2que
salga de zona de descanso (arrancar coche), entre en autopista incremente
velocidades y finalmente salga de autopista y aparque en hotel (aparcando y
parandovehculo).
Nota:Enestecasolaintroduccindedatos(atributos)seharporteclado.
Ejercicio6:
Necesitamos realizar sobre una poblacin un nuevo empadronamiento, ya que
an no lo tenemos informatizado. Para ello necesitamos recabar diversa
informacin sobre cada uno de los habitantes de la poblacin (no menos de 5
atributosasignadosdirectamente).Acontinuacinserealizarandiversasacciones
sobreestasuperclasecreada(implementalasqueconsideresoportunas).
57
58