viernes, 16 de abril de 2010

Programa area y perimetro


Este programa obtiene el perimetro y el area de un circulo con el radio que es dado por el usuario.
Math.PI*Math.Pow(r, 2); proporciona los datos (la formula) de como se obtendra el area
Circulo c =new Circulo(); indica que el programa pertenece a la clase c
{0:n}\n",c.Area (r)); indica que se dede aplicar la formula para obetener el area

Math: es una libreria
PI: es el valor de 3.1415....
Pow: indica que un numero se elevara al cuadrado (primero base, exponente)
Circulo c= new... : es el objeto
c: sin ella no se sabe a donde llegar

Investigar

¿Que es ...?
progamacion orientada a objetos

La POO es un paradigma de programación que intenta abstraer los módulos de cada programa en objetos. Los objetos son instancias de clases, en las que se declaran/especifican al menos dos cosas: los atributos, los métodos y opcionalmente los constructores.

Los atributos son las variables que posee el objeto, mientras que los métodos son las funciones o procedimientos que podemos invocar para realizar operaciones especí­ficas sobre los atributos.

Como en Java, en C Sharp utilizamos siempre clases y objetos, aún cuando no tengamos claro el concepto.

Se puede definir como una técnica o estilo de programación que utiliza objetos como bloque esencial de construcción.
Los objetos son en realidad como los tipos abstractos de datos. Un TAD es un tipo definido por el programador junto con un conjunto de operaciones que se pueden realizar sobre ellos. Se denominan abstractos para diferenciarlos de los tipos de datos fundamentales o básicos.
En C se puede definir un tipo abstracto de datos utilizando typedef y struct y la implementación de las operaciones con un conjunto de funciones.

C++
tiene muchas facilidades para definir y utilizar un tipo TAD.

Al igual que los tipos de datos definidos por el usuario, un objeto es una colección de datos, junto con las funciones asociadas, utilizadas para operar sobre esos datos. Sin embargo la potencia real de los objetos reside en las propiedades que soportan: herencia, encapsulación y polimorfismo, junto con los conceptos básicos de objetos, clases, métodos y mensajes.



objeto* se define mediante clases y structs, que conforman el plano único a partir del cual operan todos los objetos de ese tipo. Un objeto es una instancia de un tipo de clase.

La instanciación es el acto de crear una instancia de un objeto, la instancia es un objeto, la instanciación usa el operador new, después la instanciación es posible comunicarnos con el objeto a través de sus miembros.

Un Objeto es una colección de información relacionada y funcional.

Un objeto se compone de:

  • Datos que describen el objeto y
  • Operaciones que pueden ser realizadas por el objeto


campo*
objeto o valor contenido en una clase o estructura. Los campos permiten a las clases y estructuras encapsular datos.Para mayor simplicidad, estos ejemplos utilizan campos que son public, pero esto no se recomienda en la práctica. Los campos generalmente deberían ser private. El acceso a campos por parte de clases externas debería ser indirecto, por medio de métodos, propiedades o indizadores.


metodo*
La mayor parte de la funcionalidad es implementada en los métodos, los métodos son parte del Tipo (class), pero los métodos no son parte de la instancia (object).
son un bloque de código que contiene una serie de instrucciones. En C#, cada instrucción se ejecuta en el contexto de un método.Los métodos se declaran en una clase o estructura especificando el nivel de acceso, el valor devuelto, el nombre del método y los parámetros de método. Los parámetros de método se incluyen entre paréntesis y separados por comas. Los paréntesis vacíos indican que el método no requiere ningún parámetro.



funcion*

La función object.MemberWiseClone() puede ser utilizada para crear un clon de un objeto. La implementación por default de esta función produce una copia de un objeto, los campos de un objeto son copiados exactamente en lugar de ser duplicados:

 using System;

class Saludo{
public string s;
public Saludo(string s){
this.s = s;
}
}

class MiClase{
public Saludo saludo;
public MiClase(string s){this.saludo = new Saludo(s);}
public MiClase Clon(){return (MiClase)MemberwiseClone();}
}

class App{
public static void Main(){
MiClase miClase = new MiClase("Hello World!");
MiClase miClon = miClase.Clon();
Console.WriteLine("miClase : " + miClase.saludo.s);
Console.WriteLine("miClon : " + miClon.saludo.s);
miClon.saludo.s = "Hola Mundo";
Console.WriteLine("miClase : " + miClase.saludo.s);
Console.WriteLine("miClon : " + miClon.saludo.s);
}
}

Salida:

 miClase : Hello World!
miClon : Hello World!
miClase : Hola Mundo
miClon : Hola Mundo

El resultado anterior es porque la copia hecha por la función MemberWiseClonre() es una copia, el valor de saludo es el mismo en ambos objetos por lo que se se cambia un valor dentro del objeto Saludo afecta ambas instancias de MiClase.


La función Equals() es utilizada para determinar cuando dos objetos tienen el mismo contenido.

En el siguiente ejemplo se redefinen las funciones operator==() y operator!=(), para permitir la sintaxis del operador, estos operadores deben ser redefinidos en pares, no pueden ser redefinidos separadamente.

Ejemplo:

 using System;
class Empleado{
string usr;
string pwd;
public Empleado(string login, string pwd){
this.usr = login;
this.pwd = pwd;
}
public override string ToString(){
return("Usuario : " + usr + ", Password : " + pwd);
}
public override bool Equals(object o){
Empleado empB = (Empleado)o;
if(usr != empB.usr){return false;}
if(pwd != empB.pwd){return false;}
return true;
}
public static bool operator==(Empleado empA, Empleado empB){
return empA.Equals(empB);
}
public static bool operator!=(Empleado empA, Empleado empB){
return !empA.Equals(empB);
}
}
class App{
public static void Main(){
Empleado empleado1 = new Empleado("gangeles","123");
Empleado empleado2 = new Empleado("gangeles","123");
Console.WriteLine("El empleado1 es igual al empleado2: "+empleado1.Equals(empleado2));
Console.Write("empleado1 == empleado2 : ");
Console.Write(empleado1 == empleado2);
}
}

Salida:

 El empleado1 es igual al empleado2 : True
empleado1 == empleado2 : True

Al compilar el ejemplo anterior se presentara un warning indicando que no fue redefinada la función GetHashCode() ya que los valores que regresa son requeridos para ser relacionados al valor de regreso de Equals(). Cuando se invoca la función Equals() y dos objetos son iguales siempre se debe regresar el mismo código hash.

Si no es redefinido el código hash podría ser sólo identico para la misma instancia de un objeto y una búsqueda para un objeto que es igual pero no la misma instancia podría fallar.

Es posible utilizar un miembro que es único para el código hash, pero si no existe un valor único el código hash debería ser creado fuera de los valores contenidos en la función.

Si la clase no tiene un identificador único pero tiene tiene otros campos, podrías ser utilizados por la función hash:

 using System;
class Empleado{
string usr;
string pwd;
public Empleado(string login, string pwd){
this.usr = login;
this.pwd = pwd;
}
public override string ToString(){
return("Usuario : " + usr + ", Password : " + pwd);
}
public override bool Equals(object o){
Empleado empB = (Empleado)o;
if(usr != empB.usr){return false;}
if(pwd != empB.pwd){return false;}
return true;
}
public static bool operator==(Empleado empA, Empleado empB){
return empA.Equals(empB);
}
public static bool operator!=(Empleado empA, Empleado empB){
return !empA.Equals(empB);
}
public override int GetHashCode(){
return usr.GetHashCode() + pwd.GetHashCode();
}
}
class App{
public static void Main(){
Empleado empleado1 = new Empleado("gangeles","123");
Empleado empleado2 = new Empleado("gangeles","123");
Console.WriteLine("El empleado1 es igual al empleado2: "+empleado1.Equals(empleado2));
Console.Write("empleado1 == empleado2 : ");
Console.Write(empleado1 == empleado2);
}
}

La implementación del código GetHashCode anterior agrega los elementos y los regresa.


Función ToString()

Analice el siguiente ejemplo:

 using System;
class Empleado{
string usr;
string pwd;
public Empleado(string login, string pwd){
this.usr = login;
this.pwd = pwd;
}
}
class App{
public static void Main(){
Empleado empleado = new Empleado("gangeles","123");
Console.WriteLine("Empleado : " + empleado);
}
}

Salida: Empleado : Empleado

La salida fue el nombre de la clase Empleado ya que es la representación más cercana que encontro.

Es posible especificar algo con mayor sentido para ello se necesita redefinir la función ToString():

 using System;
class Empleado{
string usr;
string pwd;
public Empleado(string login, string pwd){
this.usr = login;
this.pwd = pwd;
}
public override string ToString(){
return("Usuario : " + usr + ", Password : " + pwd);
}
}
class App{
public static void Main(){
Empleado empleado = new Empleado("gangeles","123");
Console.WriteLine(empleado);
}
}

Salida: Usuario : gangeles, Password : 123



procedimiento*
rupo de instrucciones, variables, constantes, etc, que están diseñados con un próposito particular y tiene su nombre propio.
Después de escribir un procedimiento se usa su propio nombre como una sola instrucción o llamada al procedimiento.

*en c#

lunes, 1 de marzo de 2010

Espacio de nombres

Es una clasificacion especial utilizada para agrupar un conjunto de clases y estructuras relacionadas, asi como para aislar ese grupo de nombres en conjuntos de tipos de datos separados y distintos.
No se debe tener dos clases con el mismo nombre en un espacio de nombres y puede ser predefinidos o definidos por el usuario.

SINTAXIS
namespace NombreEspacio
{
// aqui van las clases del espacio de nombres
}

CLASE
unidad basica en la programacion orientada a objetos. Todo programa en C# se organiza en clases que encapsulan datos y comportamientos.
Una clase se construye on la palabra class seguido del nombre de la clase y el simbolo de inicio y fin de un bloque para delimitar la codificacion de sus miembros.

SINTAXIS

class NombreClase
{
// aqui se codifican los miembros de la clase
}

METODOS PARA ESCRIBIR DATOS

1. Write -escribe sin añadir el caracter de fin de linea a la cadena

2. Writeline -si añade el caracter de fin de linea a la cadena, de modo que lo siguiente que se escriba se colocara en la siguiente linea

Ejemplo:

Console.Write("Hola");
Console.Writeline("Pepe");
Console.Write("Cómo estas, ");
Console.Writeline("¿bien?");

Ofreceria este resultado en la consola:
HolaPepe
Cómo estas, ¿bien?

METODOS PARA LEER DATOS

variable = Console.Read(); //Lee un caracter
cadena = Console.ReadLine(); //Lee una cadena
VARIABLES Y CONSTANTES

Variable:
Posicion con nombre en memoria donde se almacena un valor de un cierto tipo de datos y puede ser modificado. las variables pueden almacenar cadenas, numeros y estructuras. Tiene un nombre (un identificador) que describe su proposito.

Constante:
Variable cuyo valor no puede ser modificado.

TIPOS DE DATOS

1. Enteros -probablemente el tipo de dato mas familiar identificado con la palabra reservada int

2.Reales -numeros decimales o numeros muy grandes

3.Caracteres -cualquier elemento de un conjunto de caracteres o alfabeto (letras, digitos, simbolos y signos de puntuacion)

Tipo

Descripcion

Valores que acepta

int

enota un tipo integral que almacena valores según el tamaño y la variedad

literales

string

epresenta una cadena de caracteres Unicode.Cadena es un alias de System.String en el.NET Framework

los operadores de igualdad (== y! =) Se definen para comparar los valores de los objetos de cadena, no referencias (7.9.7 operadores de igualdad de cuerdas).

short

tipo de datos integral que almacena valores según el tamaño y la gama

literales

long

tipo integral que almacena valores según el tamaño y la gama

literales

char

declarar un carácter Unicode en el intervalo indicado en la tabla siguiente. Unicode characters are 16-bit characters used to represent most of the known written languages throughout the world. Los caracteres Unicode son caracteres de 16 bits usados para representar la mayoría de las lenguas escritas conocido en todo el mundo.


float

denota un tipo simple que almacena 32-bit de valores de punto flotante.


double

tipo simple que almacena 64 bits de valores de punto flotante. La siguiente tabla muestra la precisión y el intervalo aproximado para el tipo de matrimonio.


bool

alias de System.Boolean. Se usa para declarar variables para almacenar los valores booleanos, verdadero y falso.

Literales



miércoles, 24 de febrero de 2010

Elementos lexicos de un programa

1. Comentarios
anotaciones para documentar el programa. Existen dos formas de colocar comentarios y son:

// Para un renglon
/* Para mas de un renglon */

2. Palabras resevadas
palabras que tienen un determinado significado para el compilador

3. Identificadores
nombres que los programadores dan a los diferentes elementos de un programa. Deben de tener las siguientes caracteristicas:

a) Letras, digitos o caracteres
b) diferentes a las palabras reservadas
c) no comenzar con digitos
d) sensible a mayusculas y minusculas
e) debe contener nombres significativos

4. Operadores y punteros
los operadores indican las operaciones y los punteros agrupan o separan. Ejemplo: { }

5. Literales
valores constantes escritos directamente en el programa

6. directivas del preprocesador
instrucciones al compilador, comienzan con un signo de #

SENTENCIAS Y BLOQUES

La sentencia es la representacion de una accion o secuencia de acciones ejecutables (operacion) o no ejecutables (declaraciones)

Bloque
los bloques son grupos de sentencias delimitadas por claves

Metodo MAIN
es el punto de entrada al programa y la ejecucion simpre inicia en el metodo main
el metodo main debe ser:
declarado static en una clase o estructura, debe regresar void o int, debe ser escrito MAIN y puede no tener parametros y recibir un arreglo de strings

(http://msdn.microsoft.com/en-us/library/x53a06bb(VS.71).aspx)