Вы находитесь на странице: 1из 23

Introducción a la

Programación Orientada
por Objetos en C#

•Desarrollo de Ejercicios

Facultad de Ciencias y Tecnología – Departamento de Informatica


Presentación Clase 3
Ejercicio 1: Enunciado
 Escriba un programa que reciba realice una lectura
de las coordenadas de dos puntos y calcule la
distancia que existe entre los mismos:

Facultad de Ciencias y Tecnología – Departamento de Informatica


Presentación Clase 3
Ejercicio 1: Programación
estructurada
Inicio
Real x1, y1, x2, y2;
Leer(x1); Leer(y1); Leer(x2); Leer(y2);
Real resultado;
resultado = (x2 – x1)^2 + (y2 – y1)^2
resultado = Raiz_cuadrada(resultado)
Imprimir(resultado)
Fin

Facultad de Ciencias y Tecnología – Departamento de Informatica


Presentación Clase 3
Ejercicio 1: POO
 Antes que pensar en cómo implementar la
distancia entre puntos, se deben identificar los tipos
de objetos involucrados en el problema:
 Tipo de Objeto (Clase): Punto
 Atributos: Coordenadas en x e y.
 Métodos identificados: Calcular distancia.
 No pensar en el programa principal. Primero pensar
en la clase.

Facultad de Ciencias y Tecnología – Departamento de Informatica


Presentación Clase 3
Ejercicio 1: POO
(Continuación)
 Definición de la Clase Punto
clase punto
real x, y;

constructor(real valor_x, real valor_y)


x = valor_x; y = valor_y;

calcular_distancia(punto p)
real resultado = (x – p.x)^2 + (y – p.y)^2
resultado = raiz_cuadrada(resultado)
retornar resultado
Facultad de Ciencias y Tecnología – Departamento de Informatica
Presentación Clase 3
Ejercicio 1: En C#
using System;

namespace Ejercicios
{
public class Punto
{
private double x, y;

public Punto(double valorX, double valorY) {


x = valorX; y = valorY;
}

public double Distancia(Punto p) {


double resultado;
resultado = Math.Pow(x - p.x, 2) + Math.Pow(y - p.y, 2);
resultado = Math.Sqrt(resultado);
return resultado;
}
}
}

Facultad de Ciencias y Tecnología – Departamento de Informatica


Presentación Clase 3
Ejercicio 1: Programa
Principal - C#
 Una vez terminada la clase, se puede escribir el
programa principal que utilice objetos de la clase
punto que hayamos definido.
 Por defecto, al crear un nuevo proyecto en el
programa Visual C# 2010 se creará la clase
Program que contendrá el método principal.
 Dentro del método Main, se escribirá el código que
se desea ejecutar.

Facultad de Ciencias y Tecnología – Departamento de Informatica


Presentación Clase 3
Ejercicio 1: Programa
Principal - C#
using System;

namespace Ejercicios
{
class Program
{
static void Main(string[] args) {
string auxiliar1 = Console.ReadLine();
string auxiliar2 = Console.ReadLine();
Punto p1 = new Punto(Double.Parse(auxiliar1),
Double.Parse(auxiliar2));

auxiliar1 = Console.ReadLine();
auxiliar2 = Console.ReadLine();
Punto p2 = new Punto(Double.Parse(auxiliar1),
Double.Parse(auxiliar2));

Console.WriteLine(p1.Distancia(p2));
}
}
}

Facultad de Ciencias y Tecnología – Departamento de Informatica


Presentación Clase 3
Ejercicio 1: Ampliación del
enunciado
 Además de calcular la distancia entre los puntos, el
programa deberá imprimir en pantalla la distancia
de ambos puntos al origen de coordenadas (punto
0, 0).
 La clase punto deberá permitir acceder al valor de
ambas coordenadas.
 La clase Punto deberá permitir cambiar el valor de
la coordenada en x y de la coordenada en y
independientemente.

Facultad de Ciencias y Tecnología – Departamento de Informatica


Presentación Clase 3
Ejercicio 1: Distancia al
Origen
 Debido a que el punto origen es un punto, se debe
crear un punto con coordenadas 0 y 0.
 Con este nuevo punto se pueden realizar dos
alternativas de solución:
 En el programa principal se puede crear el punto origen y llamar así a
los métodos de distancia.
 Se puede crear un método dentro de cada punto que calcule la
distancia al origen y retorne ese valor.

Facultad de Ciencias y Tecnología – Departamento de Informatica


Presentación Clase 3
Ejercicio 1: Distancia al Origen
// Alternativa 1: En el Main.
Punto origen = new Punto(0, 0);
Console.WriteLine(origen.Distancia(p1));
Console.WriteLine(origen.Distancia(p2)); MÉTODO MAIN
// Alternativa 2: Crear un método en la clase.
Console.WriteLine(p1.DistanciaOrigen());
Console.WriteLine(p2.DistanciaOrigen());

// Método en la clase punto.


public double DistanciaOrigen() {
Punto origen = new Punto(0, 0); CLASE PUNTO
return this.Distancia(origen);
}

Facultad de Ciencias y Tecnología – Departamento de Informatica


Presentación Clase 3
Ejercicio 1: Acceso a
atributos
 Los atributos normalmente son declarados como
privados para que el acceso a los mismos se realice
mediante métodos.
 También en este caso, con C# se puede resolver el
acceso a atributos de dos formas distintas:
 Por medio de la creación de métodos: Por cada atributo, se
creará un método para obtener su valor y otro método para
asignarle un nuevo valor.
 Por medio del uso de la estructura conocida como Propiedad.
La misma permite, en una misma estructura, definir el acceso al
valor y la asignación de un nuevo valor.

Facultad de Ciencias y Tecnología – Departamento de Informatica


Presentación Clase 3
Ejercicio 1: Acceso a atributos -
C#
Dentro de la clase Punto Dentro del Main

public double ObtenerX() {


return x;
}

public void EstablecerX(double valor) {


x = valor; // Accediendo mediante los métodos.
} Console.WriteLine(p1.ObtenerX());
Console.WriteLine(p1.ObtenerY());
public double ObtenerY() { p1.EstablecerX(5);
return y; p1.EstablecerY(3);
}
// Accediendo mediante propiedades.
public void EstablecerY(double valor) { Console.WriteLine(p1.X);
y = valor; Console.WriteLine(p1.Y);
} p1.X = 8;
p1.Y = 2;
public double X {
get { return x; }
set { x = value; }
}

public double Y {
get { return y; }
set { y = value; }
}
Ejercicio 1: Entrada y Salida
 Agregue a la clase Punto un método que imprima en
pantalla los datos del punto de la siguiente forma:
X = 5, Y = 8
Para lograrlo, recuerde que las cadenas de texto van
entre comillas dobles y el operador de suma concatena
cadenas.
 Agregue un método que lea desde el teclado las
coordenadas del punto. Debe imprimir primero “Ingrese
la coordenada en x:”, leer el valor de x, luego imprimir
“Ingrese la coordenada en y:” y luego leer el valor de
y”.
Observe el código del método Main para realizar las
lecturas. Double.Parse(texto) convierte de string a
double.
Facultad de Ciencias y Tecnología – Departamento de Informatica
Presentación Clase 3
Ejercicio 1: Entrada y Salida
Dentro de la clase Punto

public void Imprimir() {


Console.WriteLine("X = " + x + ", Y = " + y);
}

public void Leer() {


Console.Write("Ingrese el valor de X: ");
x = Double.Parse(Console.ReadLine());
Console.Write("Ingrese el valor de Y: ");
y = Double.Parse(Console.ReadLine());
}

Facultad de Ciencias y Tecnología – Departamento de Informatica


Presentación Clase 3
Ejercicio 2: Enunciado
 Escriba un programa que lea tres puntos (A, B, C)
para formar un triángulo. Una vez leídos los tres
puntos, se deberá calcular la longitud de los tres
lados (AB, BC, CA). Luego de obtener las longitudes,
se deberá validar si las mismas pueden formar un
triángulo mediante la siguiente fórmula:
AB < BC + CA
AB > |BC – CA|
Por úlimo deberá permitir calcular el perímetro del
triángulo.

Facultad de Ciencias y Tecnología – Departamento de Informatica


Presentación Clase 3
Ejercicio 2: Planteamiento
 La lectura de puntos y el cálculo de distancias entre
puntos ya han sido definidos en el ejercicio anterior.

 Nuevos problemas a resolver:


 Verificar que los tres lados formen un triángulo.
 Calcular el perímetro del triángulo.

Facultad de Ciencias y Tecnología – Departamento de Informatica


Presentación Clase 3
Ejercicio 2: Programación
estructurada
Inicio
real x1, y1, x2, y2, x3, y3;
real ladoAB = distancia (x1, y1, x2, y2);
real ladoBC = distancia (x2, y2, x3, y3);
real ladoCA = distancia (x3, y3, x1, y1);

si (ladoAB < ladoBC + ladoCA y


ladoAB > valor_abs(ladoBC – ladoCA))
Imprimir (“Es triángulo”);
sino
Imprimir (“No es triángulo);
fin_si

real perimetro = ladoAB + ladoBC + ladoCA


Fin

Facultad de Ciencias y Tecnología – Departamento de Informatica


Presentación Clase 3
Ejercicio 2: POO
 De vuelta, lo importante primero es identificar los tipos
de objetos involucrados:
 Punto: Clase que se implementó en el ejercicio
anterior y que puede ser reutilizada.
 Triángulo: Se debería definir una clase que represente
a un triángulo que debe:
 Almacenar tres puntos.
 Calcular y almacenar la longitud de los tres lados.
 Realizar la validación.
 Calcular el perímetro.
 Controlar la consistencia de los atributos mediante el acceso
a los mismos.
 Se pueden agregar métodos de entrada y salida.

Facultad de Ciencias y Tecnología – Departamento de Informatica


Presentación Clase 3
Ejercicio 2: Clase Triángulo
public class Triangulo
{
// Atributos.
private Punto a, b, c;
private double ladoAB, ladoBC, ladoCA;

// Propiedades para los lados.


// Obsérvese que no se utiliza el set ya que solo se
// permitirá leer los lados.
public double LadoAB {
get { return ladoAB; }
}

public double LadoBC {


get { return ladoBC; }
}

public double LadoCA {


get { return ladoCA; }
}

Facultad de Ciencias y Tecnología – Departamento de Informatica


Presentación Clase 3
Ejercicio 2: Clase Triángulo
// Constructores.
public Triangulo() {
this.a = new Punto(0, 0);
this.b = new Punto(0, 0);
this.c = new Punto(0, 0);
ladoAB = 0;
ladoBC = 0;
ladoCA = 0;
}

public Triangulo(Punto a, Punto b, Punto c) {


this.a = a;
this.b = b;
this.c = c;
ladoAB = a.Distancia(b);
ladoBC = b.Distancia(c);
ladoCA = c.Distancia(a);
}

Facultad de Ciencias y Tecnología – Departamento de Informatica


Presentación Clase 3
Ejercicio 2: Clase Triángulo
// Math.Abs se utiliza para obtener el valor absoluto.
// Cuando lo que está dentro del if es de una línea no
// es necesario el uso de llaves.
public bool ValidarTriangulo() {
if (ladoAB < ladoBC + ladoCA && ladoAB > Math.Abs(ladoBC - ladoCA))
return true;
else
return false;
}

// Retorna el valor del perímetro si es un triángulo.


// Si no triángulo, retorna cero.
public double ObtenerPerimetro() {
if (this.ValidarTriangulo())
return ladoAB + ladoBC + ladoCA;
else
return 0;
}

Facultad de Ciencias y Tecnología – Departamento de Informatica


Presentación Clase 3
Ejercicio 2: Clase Triángulo
// Entradas y Salidas:
// Se utilizan los métodos ya escritos en Punto.
public void LeerTriangulo() {
Console.WriteLine("Ingrese los valores para los tres puntos:");
a.Leer();
b.Leer();
c.Leer();
}

public void ImprimirTriangulo() {


Console.WriteLine("Puntos A, B y C:");
a.Imprimir();
b.Imprimir();
c.Imprimir();
}

Facultad de Ciencias y Tecnología – Departamento de Informatica


Presentación Clase 3

Вам также может понравиться