Está en la página 1de 42

ALGORITMOS AVANZADOS Y ESTRUCTURA DE DATOS

OBJETO, CLASE. PROPIEDADES Y MTODOS.


Docente: Pedro Coronado Rodrguez

PROGRAMACION ORIENTADA A OBJETOS

Un mtodo de implementacin en el que los programas se organizan como colecciones cooperativas de objetos, cada uno de los cuales presentan una instancia de alguna clase, y cuyas clases son todas miembros de un jerarqua de clases unidas mediante relaciones de herencia
Grady Booch, Autor del mtodo Booch, muy popular en la dcada de los 90s Creador de la empresa Rational, fabricante de la herramienta Rose para ingeniera de software orientada a objetos e impulsor del Lenguaje Unificado de Modelado (UML).
2

Molde

Productos 3

Definiciones clases y objetos

Clase
Las clases son abstracciones que representan a un conjunto de objetos con un comportamiento e interfaz comn.

Objeto
Un objeto es una coleccin de datos y un conjunto de rutinas miembros(entre las que se destacan los mtodos y constructores) Representan cosas fsicas o abstractas que tienen un estado y un comportamiento.

Clase

Objetos

Universidad
Persona

Alas Peruanas, UNICA, etc.


Juan, Mara, etc.

Ejemplo de clases y objetos.

Ejemplo de clases y objetos.


abstraccin Caballo
String Nombre String Raza Int Edad Nombre de la clase Atributos o Propiedades

Correr() Comer()

Mtodos

Real (concrecin)

Caballo_1
Icaro Waler 4 Correr() Comer()

Es una instancia de

Ejemplo de clases y objetos.


Camioneta: de Clase coche
Estado Color: negro Peso: 1400 Kg. Altura: 1,50 m. Anchura: 1,30 m. Marca: Toyota Comportamiento Avanzar Retroceder Girar Izq. Girar der.

Clase coche
Estado Color Peso Altura Anchura marca
Comportamiento Avanzar Retroceder Girar Izq. Girar der.

OBJETO 1

Auto: de Clase coche


Estado Color: blanco Peso: 800 Kg. Altura: 1,40 m. Anchura: 1,24 m. Marca: Nissan Comportamiento Avanzar Retroceder Girar Izq. Girar der.

OBJETO 2

Un objeto es una coleccin de datos y un conjunto de rutinas miembros(entre las que se destacan los mtodos y constructores) Representan cosas fsicas o abstractas que tienen un estado y un comportamiento.

Ejemplo de clases y objetos.


Figuras geomtricas Vehculos motorizados

Todos los objetos son ejemplares o instancias de alguna clase, los trminos instancia y objeto son intercambiables. Los objetos de una misma clase tienen las mismas responsabilidades. Los objetos con las mismas responsabilidades pueden ser agrupados en una clase. Las clases son abstracciones que generalizan dominios de objetos.

Ejemplo de clases y objetos.

Estructura de un programa en C#
//Ninguna, una o varias sentencias using using System; //Un espacio con nombres; este puede ser no considerado. namespace ConsoleApplication1 { //Seccion de clases creadas por el usuario Class nombre_clase {} //Enumeraciones Enum nombre_enumeracion {} //Estructuras Struct nombre_estructura {} //Otros. por ejemplo:interface, delegado, namespace //Clase principal, en la cual se encuentra el main() class Program { static void Main(string []arg) { } } }

Los nombres o identificadores de las clases, enumeraciones o estructuras las define el programador.

Cuentan con una CLASE O ESTRUCTURA QUE POSEE UN METODO Main() donde se inicia la ejecucin de la aplicacin.

Un programa sencillo tiene al menos una clase Class Program y el mtodo Main()

Declaracion de clases: sintaxis


En C#, una clase es un tipo de datos muy eficaz. Como las estructuras, las clases definen los datos y el comportamiento del tipo de datos.

Clase persona

Declaracin de objetos: sintaxis


Una vez declarada una clase, esta viene a ser un nuevo tipo de dato, por tanto los objetos se declaran igual que las variables Sintaxis: Identificador clase

persona persona1

Clase persona

Objeto persona1

Aqu se asocia el objeto con la clase, se instancia la clase. No crea el objeto.

Creacin de objetos: sintaxis


El constructor de la clase se ejecuta automticamente al crear un objeto. Sintaxis: Objeto =new identificador_clase()
El objetivo de new es asignar memoria para el nuevo objeto.

persona persona1= new persona();

Clase persona

Objeto persona1

Aqu se asocia el objeto con la clase, se instancia la clase. No crea el objeto.

Declaracin y creacin de objetos mediante dos instrucciones : sintaxis


Para que los objetos (variables) puedan utilizarse deben ser declaradas e inicializadas. Sintaxis: Identificador_clase objeto; Objeto=new Identificador_clase();

Declaracin

Persona persona1; persona1 = new Persona();

Creacin

Declaracion y creacin de objetos mediante una sola instruccin : sintaxis


Se puede utilizar una sola instruccin para declarar o crear un objeto. Sintaxis: Identificador_clase objeto=new Identificador_clase();

Persona persona1 = new persona();

Declaracin y creacin

Ejemplo real en C#.

17

A.- Estructura de una clase creada por el usuario:


A continuacin se muestra una estructura de programa donde el usuario crea objetos personalizados.
Estas se pueden crear de dos maneras:

a. En un solo namespace donde se encuentra la clase Program. b. En una nueva clase que se agrega a la ya existente por defecto (la
clase program)

Clase persona y Program en un solo archivo.


using System; namespace proy_persona { class persona { //Campos de datos private string nombre; private char sexo; private int edad; // constructor por defecto: public persona() { Console.Write ("Ingrese su nombre: "); nombre = Console.ReadLine(); Console.Write("Ingrese sexo: "); sexo = char.Parse (Console.ReadLine()); } // Metodo asignar_edad de la clase persona: public void AsignarEdad(int e) { edad=e; } // Metodo reporte de la clase persona: public void Reporte() { if (sexo == 'f') Console.WriteLine("La Sra(ta) {0} tiene {1} aos", nombre, edad); else if (sexo=='m') Console.WriteLine("El Sr {0} tiene {1} aos", nombre, edad); }

CASO A

} class Program { static void Main(string[]args) { // invocamos al constructor persona para crear el objeto persona1 persona persona1 = new persona(); int edad; Console.WriteLine("Ingrese su edad: "); edad= int.Parse (Console .ReadLine()); //Invocamos al mtodo AsignarEdad, envindole el valor de edad persona1.AsignarEdad(edad); //Invocamos al mtodo Reporte persona1.Reporte(); Console.ReadLine(); } }
}

Clase persona y Program en dos archivos.


using System; namespace practica { public class Persona { //Campos de datos private string nombre; private char sexo; private int edad; // constructor por defecto: public Persona() { Console.Write("Ingrese su nombre: "); nombre = Console.ReadLine(); Console.Write("Ingrese sexo: "); sexo = char.Parse(Console.ReadLine()); } // Metodo asignar_edad de la clase persona: public void AsignarEdad(int e) { edad = e; } // Metodo reporte de la clase persona: public void Reporte() { if (sexo == 'f') Console.WriteLine("La Sra(ta) {0} tiene {1} aos", nombre, edad); else if (sexo == 'm') Console.WriteLine("El Sr {0} tiene {1} aos", nombre, edad); } } }

CASO B

Clase persona

Clase persona y Program en dos archivos.

CASO B
using System; namespace practica { class Program { static void Main(string[] args) { Persona persona1 = new Persona(); } } }

Clase Program

Los modificadores de acceso a una clase.


Una clase debe ocultar la mayor cantidad de informacin posible, por lo tanto, es necesario imponer ciertas restricciones a la forma en que se pueden manipular una clase, y a la forma en que se pueden utilizar los datos y el cdigo contenidos en la misma.
public, el miembro es accesible desde cualquier parte, este modificador de acceso es el menos restrictivo. protected, el miembro es accesible en la clase y todas las clases derivadas. No es permitido el acceso desde fuera. El acceso protected permite a otras clases depender de la implementacin interna de la clase y por lo tanto deberan ser otorgados slo cuando sea necesario. private, slo el cdigo dentro de la misma clase puede acceder este miembro. Las clases derivadas no pueden acceder al cdigo. Internal, El acceso esta limitado al proyecto actual. Internal protected, El acceso esta limitado al proyecto actual, asi como a los derivados de ella

*Todo es private por omisin.

B.- Los campos de datos.


Son las variables declaradas dentro de la clase. Sintaxis:

class persona { //Campos de datos private string nombre; private char sexo; private int edad; public static int x = 100;

}
No se puede hacer referencia a un miembro esttico por medio de una instancia. En vez de ello, se debe hacer referencia por medio del nombre de tipo. Por ejemplo: Persona.x

C.- Concepto de constructor de la clase. Los constructores son porciones de cdigo que tienen el mismo nombre que la clase y, normalmente, inicializan los miembros de datos del nuevo objeto. using System;
namespace proy_taxi { public class Taxi Crea un objeto { asignndole el valor TRUE public bool isInitialized; public Taxi() { isInitialized = true; } } Invoca al class TestTaxi constructor sin { parmetros. static void Main() { Taxi t = new Taxi(); System.Console.WriteLine(t.isInitialized); } } Instancia al objeto }

Campos de la clase

Constructor tiene el mismo nombre de la clase

Constructor por defecto. Cuando no se define un constructor en la clase , se invoca a un constructor por defecto. Caractersticas: Todos los campos se inicializan en cero. Campos numricos(int, double, decimal, etc.) se inicializan a cero. Campos bool se inicializan en false. Tipos de referencia (como los objetos se inicializan en null) Tipos struct se inicializan para contener valores de cero Accesibilidad publica.

Constructor por defecto. No siempre es bueno utilizar un constructor por defecto. Por ejemplo el hecho de que el acceso sea publico, o el hecho que todos su valores se inicialicen en los valores mencionado en la diapositiva anterior; asimismo el cdigo invisible es difcil mantener. El cdigo del constructor por defecto es invisible.
Ejemplo:
using System; namespace proy_cons_defecto { class area { private double largo, ancho; //metodos public void leerDatos() {Codigo aqu } public double calArea() {Codigo aqu} public void reporte() { Console.WriteLine("El rea del terreno es {0}", largo); } } class Program { //metodo principal Main() static void Main(string[] args) { area miarea = new area(); Console.ReadLine(); } } }

No se tiene un constructor, se crea un objeto con valores por defecto: largo=0, ancho=0

Crea el objeto miarea, invocando al constructor por defecto.

D.- Mtodo (funcin o procedimiento). Son conjuntos de instrucciones a las que se le asocia un identificador de modo que si se desea ejecutarlas, basta referenciarlas a travs de dicho identificador en vez de escribirlas.

La sintaxis que se usa para definir mtodos es la siguiente:.


[Static] Modificador_acceso <TipoDevuelto> <identificador> ([<Parmetros>]) { <instrucciones> }

Los mtodos, tambin llamados funciones, son trozos de cdigo que reciben unos datos, hacen algo con esos datos, y a veces devuelven algn valor

Declaracin de mtodos Los mtodos se declaran en una clase o estructura especificando el nivel de acceso, el valor devuelto, el nombre del mtodo y los parmetros de mtodo. Los parmetros de mtodo se incluyen entre parntesis y separados por comas. Los parntesis vacos indican que el mtodo no requiere ningn parmetro. Sintaxis:
<tipoRetorno> <nombreMtodo>(<parmetros>) { <cuerpo> }

Declaracin de mtodos
int multiplicar( int a, intb ) { return a*b; } devuelve un tipo int, tiene por nombre multiplicar, los parmetros son a y b, ambos del tipo int, y el cuerpo del mtodo es simplemente "return a*b;". Cuando queramos llamar a un mtodo, debemos simplemente poner el nombre del mtodo y sus argumentos dentro de un parntesis separados por comas. Para llamar al mtodo multiplicar declarado antes, simplemente debemos escribir multiplicar (9,7);

Declaracin de mtodos
using System; class multiplicar { public double multiplica(double a, double b) { return a * b; } } class Principal { public static void Main() { multiplicar m = new multiplicar(); Console.WriteLine(m.multiplica(9, 7)); } }

D.- Clasificacin de los mtodos

Se pueden clasificar: SEGN EL RETORNO DEL VALOR: Mtodos que retornan un valor, tambin llamado funcin. Estos mtodos se conocen como funciones, que tienen como instruccin final la palabra reservada return. Mtodos que no retornan un valor (void), tambin llamado procedimiento. A estos mtodos se le llama procedimientos, carecen de return.

D.- Clasificacin de los mtodos

Se pueden clasificar: SEGN LA FORMA DE ACCESO AL METODO: Mtodo static. Van precedidos de la palabra reservada static. Para el acceso a estos mtodos no se necesita instanciar la clase(es decir no se necesita objetos) Mtodo normal o no static. No van precedidos de la palabra reservada static. Para el acceso a estos mtodos se requiere instanciar la clase(crear un objeto de la clase)

D.- Clasificacin de los mtodos


Ejemplo de declaracin
Public void Metodo1 (int a, double b) { }

Observacin
Mtodo conocido tambin como procedimiento(): tiene dos parmetros a y b de los tipos int y double respectivamente, sin valor de retorno void Mtodo conocido tambin como funcion(): tiene un parmetro a del tipo int, y retorna un valor de tipo double.

Public double Metodo2 (int a) { double x Return x }

D.- Clasificacin de los mtodos

Ejemplo de declaracin Static public void Metodo3 () { }

Observacin

Mtodo conocido tambin como procedimiento() static: no tiene parmetros ni retorna valor -void

Static public int Metodo4 (double p1) { Int vr; Return vr; }

Mtodo conocido tambin como funcion() static: tiene parmetro double P1 retorna un valor int vr.

E.- Acceso a los mtodos static.


Para que los cdigo de los mtodos ya creados (declarados) se ejecuten deben ser llamados o invocados (acceso). Para invocar o llamar a los mtodos static, no se requiere instanciar la clase donde estn escritos. La sintaxis de la llamada o invocacin a un mtodo static, para ser utilizado, depende si se ha definido como funcin o como procedimiento.

E.- Acceso a los mtodos static.


Acceso a los mtodos STATIC declarados en la propia clase. Sintaxis para la LLAMADA de un mtodo static declarado en la propia clase.
Llamada a un procedimiento static /* El metodo3() en su definicin no tiene retorno ni parmetros actuales*/ Metodo3(); Llamada a una funcin static /*El metodo4() en su definicin tiene retorno de valor double y un parmetro actual del mismo tipo de x(argumento en la llamada al mtodo)*/ Int y; double x; Y=metodo4(x) No enva argumentos al mtodo invocado (parmetros actuales en la definicin) No recibe valor

Enva un argumento al mtodo invocado que debe tener un parmetro actual del mismo tipo. Recibe un valor en y del mismo tipo de retorno en la definicin del metodo4() P1 (en la definicin), x (en la llamada) son del mismo tipo: double. Vr (en la definicin), y (en la llamada) son del mismo tipo: int.

Ejemplo: Acceso a los mtodos static declarados en la propia clase.


using System; namespace practica { class Operaciones { static void sumar(int valor1, int valor2) { int resp; resp = valor1 + valor2; Console.WriteLine("El resultado es: " + resp); } public static void asignarValores() { int v1, v2; Console.WriteLine("Ingrese valor 1: "); v1 = int.Parse(Console.ReadLine()); Console.WriteLine("Ingrese valor 2: "); v2 = int.Parse(Console.ReadLine()); sumar(v1,v2); } } class program { static void Main(string[] args) { Operaciones.asignarValores(); Console.ReadKey(); } } }

E.- Acceso a los mtodos static.


Acceso a los mtodos STATIC declarados en la otra clase. Sintaxis para la LLAMADA de un mtodo static declarado en la propia clase.
Llamada a un procedimiento static No recibe valor

otraClase.Metodo3();
Llamada a una funcin static Int y; double x; Y=otraClase.metodo4(x) Enva un argumento al mtodo invocado. Recibe un valor del mismo tipo de retorno en la definicin del metodo4(). P1 (en la definicin), x (en la llamada) son del mismo tipo: double. Vr (en la definicin), y (en la llamada) son del mismo tipo: int.

Ejemplo: Acceso a metodos static declarados en la otra clase .


using System; namespace practica { class Operaciones { public static void sumar() { int a, b, c; a=10; b=10; c = a +b; Console.WriteLine(c); } } class program { static void Main(string[] args) { Operaciones.sumar(); Console.ReadKey(); } } }

F.- Acceso a datos y mtodos normales(no static) de una clase definida por el usuario.
Por defecto los datos miembros (campo de datos) de una clase son privados(private). Solo pueden ser accesados por los propios mtodos de su clase. Pero los datos y mtodos de una clase cuando deben ser invocados desde otra clase, solo pueden hacerse a travs de los objetos (instancias de la clase) y por ello dichos miembros deben tener un modificador de acceso public. A continuacin se muestra la sintaxis de acceso a datos y mtodo public no static de una clase mediante un objeto de la clase.
Sintaxis de acceso a datos y metodos public no static de una clase

Obj.datoM Obj.MetodoM()

Obj.nombre=Andres; Obj.AsignaCodigo();

Referencia a un dato public del objeto Obj. Referencia a un mtodo public del objeto Obj.

El acceso a los datos y mtodos contenidos en una clase es siempre mediante el operador .

Ejemplo: Acceso a mtodos no static.


using System; namespace practica { class Operaciones { void sumar(int valor1, int valor2) { int resp; resp = valor1 + valor2; Console.WriteLine("El resultado es: " + resp); } public void asignarValores() { int v1, v2; Console.WriteLine("Ingrese valor 1: "); v1 = int.Parse(Console.ReadLine()); Console.WriteLine("Ingrese valor 2: "); v2 = int.Parse(Console.ReadLine()); Operaciones objOperaciones = new Operaciones(); objOperaciones.sumar(v1, v2); } } class program { static void Main(string[] args) { Operaciones objOperaciones = new Operaciones(); objOperaciones.asignarValores(); Console.ReadKey(); } } }

ALGORITMOS AVANZADOS Y ESTRUCTURA DE DATOS

OBJETO, CLASE. PROPIEDADES Y MTODOS.


Docente: Pedro Coronado Rodrguez