sábado, 31 de agosto de 2013

Modelo Vista Controlador (MVC) aplicado al proyecto de cuadrilateros...

Hola de nuevo y bienvenidos a mi blog, en está oportunidad voy a explicarles el modelo de Vista-Controlador aplicado al proyecto que hemos venido trabajando "Proyecto de Cuadrilateros" ; Sin mas preambulos de lo que se encarga el modelo de vista-controlador es de separar cada uno de los métodos que se invocan y ponerlos en la fase o en la zona en donde corresponde, ya sea la parte de vista, o en el control o en el modelo esto es un poco dificil de entender, pero a su vez es muy util porque nos permite ver organizadamente cada elemento a donde pertenece, y como va organizado dentro del modelo general. veamos nuestro modelo vista-controlador (MVC) con UML para entenderlo dentro de nuestro proyecto.


Al observar y analizar nuestro modelo de Vista-Controlador tenemos tres niveles y analizandolos el primero es la vista: en esta tenemos todo lo correspondiente a la parte visual del programa como labels botones textbox combobox, todo el entorno gráfico contenido en el windows forms, tenemos tambien la parte de control o controlador: en esta fase debemos controlar las características que nos pide el usuario, si este nos dice que quiere un rombo generamos un objeto tipo cuadrilatero pero en caso de que nuestro usuario eliga haver otra figura reutilizaremos la clase abstracta cuadrilatero y generaremos un entorno nuevo de trabajo para poder graficar esta nueva figura obvio con características ya establecidas por la clase cuadrilatero, lo mismo con cuadrado que va a heredar de rectangulo;y en la fase de modelo es lo que hemos venido trabajando de herencia pues aca vemos como los diferentes cuadrilateros heredan de la clase superior cuadrilatero que además es abstracta.

De aca en adelante usamos lo que es el constructor privado esto con el fin de que sea la misma clase controlador la que lo maneje, la variable del método controlador a la que hemos llamado crtl esta la vamos a declarar como estatica "static" en programación y porque estatica pues para que solo se use una vez y no pueda ser modificada o instanciada de nuevo, esto con el fin de tener todo bien organizado como lo habiamos mencionado antes y tambien por si se requiere incluir mas metodos atributos o figuras se tenga bein claro donde esta cada cosa.

A partir de aca ya al heber definido un metódo "estatico" vamos a ahorrar por decir así la memoria que utilizamos en el computador para crear los distintos cuadrilateros, mas importante es saber que definimos el metodo controlador como estático para evitarnos crear objetos sin ninguna clase de control ya que deberiamos si queremos trabajar pulidamente reescribir figuras cuadradas mas no acumular la basura en la memoria del Pc. La clave para hacer esto que acabo de explicar es preguntarle a nuestro método estatico que si nuestro controlador es nulo entonces nos genere un nuevo controlador en memoria para crear la nueva figura, pero si no lo es que no llene mas espacio en memoria sino que reemplaze lo que se habia creado de las mismas características de esa figura y realice una nueva.

Controlador static demeControl(){ if(ctrl == null) ctrl = new Controlador(); return ctrl; }   

Esto es lo que conocemos como el patrón solitario o <<singleton>> y es una gran ventaja a la hora de programar pues lo podemos invocar cuando queramos y nos ayuda enormemente en llamar a cada una de las funciones que controla a los diferentes cuadrilateros, ya sea un rectangulo un cuadrado un rombo un deltoide o lo que sea....
Aca un ejemplo de como se utilizaria el singleton para crear un cuadrado:

Controlador.demeControl().creaCuadrado(4);Controlador.demeControl().consultarPerimetro();Controlador.demeControl().consultarArea() ...

Y nos crea un cuadrado de lados de valor 4 unidades y con el mismo controlador le pedimos que nos de el area y el perimetro, que ya esta determinado al hacer la reutilización del código. Bueno muchachos espero les halla sido de utilidad esta explicación de lo que es el modelo vista-controlador "MVC" y de como es muy útil para aplicarlo en este caso al proyecto que hemos venido trabajando de cuadrilateros.

martes, 27 de agosto de 2013

Examen-Paralelogramo ("Tema A")

Buenos días Bloggeros en el día de hoy voy a explicarles como se implementa una nueva clase, esta llamada paralelogramo, siguiendo con el proyecto que veníamos trabajando el de los cuadriláteros vamos a calcular el Área y el Perímetro de dicha figura

Observemos que el paralelogramo es una figura que tiene 2 pares de lados iguales y que ademas de esto tiene los ángulos opuestos iguales, no va resultar difícil hallar el perímetro ya que esta clase paralelogramo puede heredar de la clase abstracta <<abstract>> de cuadriláteros, mas sin embargo no puede heredar de cuadrado ni rectángulo, no obstante le da la herencia a esta dos figuras geométricas.

El perímetro podría ser hallado de la siguiente manera:

public override double perimetro()
{
return lado1 + lado2 + lado3 + lado4
}

Un vistazo de la interfase grafica:



Ahora un vistaso a nuestro UML para ver como va encadenado las clases:


Para calcular Área sabemos que esta se conforma por medio de dos cuadrados uno cortando las extremos del paralelogramo y otros con las partes restantes, para verlo mas claro esta la imagen

Vemos que se forma un cuardrado al cual ya le calculamos el Area en los anteriores tutoriales recordemo:

public override double calculeArea()
{
return lado1 * lado2;
}


link del proyecto: 


domingo, 25 de agosto de 2013

Proyecto Cuadrilateros

Hola amigos bloggeros en esta entrada del blog vitacora de .Net voy a explicarles brevemente un proyecto que me haparecido interesante de explicar debido a que involucra sobrecarga y herencia, temas tocados en las anteriores entradasal blog este proyecto lo llamaremos cuadrilatero.cs, en primera instancia vamos a crear la parte gráfica de nuestro proyecto C# en un windows forms, en el vamos a incluir el rectangulo y el cuadrado como primeras figuras geométricas dentro de la clase cuadrilateros y a ellos vamos a calcularles el area y el perímetro.


En nuestro proyecto el usuario puede averiguar el perimetro y el area de un cuadrado y un rectangulo con tan solo darle los datos respectivos al programa.

Veamoslo en UML para entender el concepto de herencia y de método abstracto <<abstract>> en los métodos aplicados al proyeto:


Es interesante e importante saber que el perímetro de un cuadrilatero es la suma de sus lados de igual manera necesitamos saber que el area de nuestros dos cuadrilateros que vamos a trabajar "cuadrado y rectangulo" estan dadas por la base*altura y lado*lado, ya que existen mas cuadrilateros como rombo trapezio entre otros, no nos vamos a preucupar pues sabemos que estos tienen en comun que tienen 4 lados y que siempre la suma de sus lados va ser el perimetro, el area puede que varie un poco y para este método si vamos aplicarle unas variaciones dependiendo del cuadrilatero tratado en cuestión.

Para lograr lo anteriormente explicado del método "Area" debemos utilizar propiedades de abstracto y herencia, para las clases en C#. Para lograr esto debemos poner nuestra clase cuadrilatero ya no como publica sino como abstracta de igual manera cada uno de los lados de cada uno de los cuadrilateros debe ser definida como "protected".

abstract class Cuadrilatero
{

protected double lado1;
protected double lado2;
protected double lado3;
protected double lado4; 

Hecho esto se debe crear un constructor, y de lo que se encarga el constructor es de almacenar el valor dado a cada uno de los lados, para que se vallan instanciando desde las clases hijas y de esta manera formar el perimetro de la figura geometrica de cuatro lados, de aqui viene la razon por la que en el proyecto yo utilizo linked labels para retornar el valor de salida una vez sumado los lados del cuadrilatero.

*/ Metodos de Cuadrilatero/*
*/ Calcular un perimetro = Sumar lados del cuadrilatero/*
public double calculePerimetro()
{
return lado1 + lado2 + lado3 + lado4;
}

Para el método "Area" como lo habiamos mencionado con anterioridad tenemos que usar la palabra abstract despues de hacerlo público, para que aplique a todos los cuadrilateros sean o no sean irregulares de esta forma nos queda de la siguiente manera:

*/ Calcular un área = Depende de la forma del cuadrilatero/*
*/ Por ello se usa como metodo abstracto, para dejarlo como base/*
public abstract double calculeArea();

Una vez generalizado el proyecto de esta manera, ya podemos empezar a trabajar con cada figura por separado aunque ahora si aplicando el concepto de herencia en c# . veamoslo con el cuadrado.

En c# se define la herencia de la siguiente manera: class Cuadrado : Cuadrilatero
Lo que debemos hacer a continuación es crear un constructor el cual hereda del constructor ya establecido del costructor cuadrilatero, pero este nuevo constructor va a heredar características del constructor cuadrilatero veamos como lo hacemos con el perímetro del cuadrado:

*/ Constructor heredado por cuadrilatero/*
public cuadrado(double lado_cua)
: perimetro(lado_cua, lado_cua, lado_cua, lado_cua)
{
}
Con esto tenemos hecho el perimetro de nuestro cuadrado, ahora para averiguar el area tenemos que utilizar la palabra de herencia "override" que sirve para heredar de la clase padre cuadrilatero entonces el Area será lado*lado.

public override double calculeArea()
{
return lado1 * lado2;
}

Con el rectángulo ya es mas facil debido a que puede heredar las características de sus metodos constructores de cuadrado y cuadrilatero en este caso hereda directamente de cuadrado que ya a heredado de cuadrilatero

class Rectangulo : Cuadrado
{

Al heredar de cuadrado ya rectangulo puede calcular su area y perímetro porque se hace exactamente igual en los dos cuadrilateros en caso de una figura irregular como un rombo o un trapecio estas no podrian heredar todas sus características solamente las correspondientes al constructor del perimetro. Area sería un poco mas complejo.

Espero les halla sido de ayuda este proyecto-tutorial explicado paso a paso y en nuestra próxima entrada al blog espero hacerlo con las restantes cuadrilateros que se denominan de forma irregular, rombo trapezio, paralelogramo, trapezoide etc. 


domingo, 4 de agosto de 2013

Herencia, Sobrecarga y Sobre escritura en C#

En esta entrada voy hablar sobre herencia, sobre escritura y sobrecarga, características que vienen del lenguaje de JAVA pero que son bien acoguidas y asimiladas por varios lenguajes de programación debido a sus grandes características y buen poder de aplicación.

Sobrecarga de métodos y de constructores 

La firma de un método es la combinación del tipo de dato que regresa, su nombre y su lista de argumentos. 
La sobrecarga de métodos es la creación de varios métodos con el mismo nombre pero con diferentes firmas y definiciones. Java utiliza el número y tipo de argumentos para seleccionar cuál definición de método ejecutar. 
Java diferencia los métodos sobrecargados con base en el número y tipo de argumentos que tiene el método y no por el tipo que devuelve. 
También existe la sobrecarga de constructores: Cuando en una clase existen constructores múltiples, se dice que hay sobrecarga de constructores.La herencia en javaJava permite el empleo de la herencia, característica muy potente que permite definir una clase tomando como base a otra clase ya existente. Esto es una de las bases de la reutilización de código, en lugar de copiar y pegar.En java, como ya vimos la herencia se especifica agregando la cláusula extends después del nombre de la clase. En la cláusula extends indicaremos el nombre de la clase base de la cuál queremos heredar.Al heredar de una clase base, heredaremos tanto los atributos como los métodos, mientras que los constructores son utilizados, pero no heredados.Sobreescritura de métodos 
Una subclase hereda todos los métodos de su superclase que son accesibles a dicha subclase a menos que la subclase sobreescriba los métodos. 
Una subclase sobreescribe un método de su superclase cuando define un método con las mismas características (nombre, número y tipo de argumentos) que el método de la superclase. 
Las subclases emplean la sobreescritura de métodos la mayoría de las veces para agregar o modificar la funcionalidad del método heredado de la clase padre

¿Como colocar Flash en una aplicación Web? y ¿Como cargar SQL en una aplicación Web?

En esta entrada del blog voy a explicar como se carga Flash en una aplicacion web usando el Visual Studio y su herramienta .ASP e igualmente como cargar SQL en un aplicación web. Todo lo ofrece .ASP ya que dentro de esta Windows forms podemos utilizar códigos de transferencia de una aplicación a otra como por ejemplo  Server.Transfer para redirigir el explorador a la página especificada 

La página a la que se transfiere debe ser otra página de formularios Web Forms (página .aspx) de la misma aplicación. No puede utilizar Server.Transfer para redirigir a una página .asp o .asmx.  

Asegúrese de que la página de destino existe. Como Server.Transfer se ejecuta en el servidor, el explorador no tiene un registro del cambio de la página. Por tanto, si el usuario actualiza la página, pueden producirse resultados inesperados.
Este otro codigo nos sirve en caso de tener una aplicación flash a la que queremos acceder desde una aplicación ASP .NET;

For a list of all members of this type, see HttpServerUtility Members.
   System.Web.HttpServerUtility[Visual Basic]NotInheritable Public Class HttpServerUtility[C#]public sealed class HttpServerUtility[C++]public __gc __sealed class HttpServerUtility[JScript]public class HttpServerUtilityThread Safety
Remarks
Requirements


Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.
The methods and properties of the HttpServerUtility class are exposed through ASP.NET's intrinsic Server object.
Namespace: System.Web
Platforms: Windows 2000, Windows XP Professional, Windows Server 2003 family
Assembly: System.Web (in System.Web.dll)
Para el caso de SQL tambien lo hacemos desde una aplicación ASP .NET
El siguiente ejemplo ilustra como realizar una conexión contra SQL Server mediante autenticación integrada en ASP.NET y obtiene datos de la base de datos:
Sub Page_Load(sender as object, e as System.EventArgs)
'Se define el objeto conexión
dim conn as System.Data.SqlClient.SqlConnection dim reader as System.Data.SqlClient.SqlDataReader dim sql as System.Data.SqlClient.SqlCommand
'Se especifica el string de conexión
conn = New System.Data.SqlClient.SqlConnection() conn.ConnectionString = "data source=.;integrated security=SSPI;initial catalog=TestConnDb"
'Se abre la conexión y se ejecuta la consulta
conn.Open() sql = new System.Data.SqlClient.SqlCommand sql.CommandText = "SELECT * FROM tabla" sql.Connection = conn reader = sql.ExecuteReader()
Do while reader.Read() Response.Write( reader.GetValue(0) + "<br/>" ) Loop
End Sub.