2. Lenguaje de la programación orientada a
objetos C#
Presentado por:
-Daniel Silva -Andres Pinto
-Ross Tique -Oscar Loaiza
-Edison Caro
3. Historia de C#
C# es un lenguaje de orientado a objetos diseñado por
Microsoft en 1998. Sus principales creadores fueron Scott
WilTamuth y Anders Hejlsberg.
En Julio de 2000, durante la Conferencia de Desarrolladores
profesionales, el lenguaje llamado C-like Object
Oriented Language fue renombrado C# por razones de
registro
C# apareció en el 2001 con un Sistema Operativo
Multiplataforma.
C# combina los mejores elementos de C++, Java, Visual Basic
4. Durante el desarrollo del .NET Framework, sus bibliotecas
de clases fueron escritas mediante un compilador de
código administrado Simple Managed C (SMC).
Anders Hejlsberg también reconocido por diseñar el lenguaje
TURBO PASCAL y la herramienta RAD DELPHI.
Actualmente la versión más moderna de C# es la 6.0.
5. El nombre de C# fue inspirado por la notación musical donde
la almohadilla (#) indica que la nota escrita debe hacerse un
semitono más alto en el tono. Por los tanto C# es un
“semitono” mas alto que C ++
6. Características principales
Sencillez de uso: C# elimina muchos elementos añadidos por
otros lenguajes y que facilitan su uso y comprensión
Modernidad: Al ser C# un lenguaje de última generación,
incorpora elementos que se ha demostrado a lo largo del
tiempo que son muy útiles para el programador.
Orientado a componentes: La propia sintaxis de C# incluye
elementos propios del diseño de componentes que otros
lenguajes tienen que simular. La sintaxis de C# incluye
por ejemplo formas de definir propiedades, eventos y
atributos
7. Orientado a objetos: C# como lenguaje de última de
generación , y de propósito general, es orientado a
objetos. C# no permite la inclusión de funciones ni
variable globales que no están incluidos en definición de
tipo. Además, C# soporta todas las características del
paradigma de la programación orientada a objetos, como
son la encapsulación, la herencia y el polimorfismo
Recolección de basura: Todos los lenguajes incluidos en la
plataforma .NET tiene a su disposición el recolector de
basura del CLR. Esto implica que no es necesario incluir
instrucciones de destrucción de objetos en el lenguaje
8. Seguridad de tipos: C# incluye mecanismos de control de
acceso a tipos de datos, lo que garantiza que no se
produzcan errores difíciles de detectar como un acceso a
la memoria de ningún objeto
Instrucciones seguras: Para Evitar errores comunes cómo se
producían programando en otros lenguajes, en C# se han
impuesto una serie de restricciones en el uso de
instrucciones de control más comunes. Por ejemplo en la
evaluación de toda la condición ha de ser una expresión
condicional y no aritmética
9. Unificación de Tipos: En C# todos los tipos derivan de una
superclase común llamada System.Object, por lo que
automáticamente heredarán todos los miembros definidos en
esta clase. Es decir, son objetos. A diferencia de Java,
en C# esta característica también se aplica para los
tipos básicos
Extensión de los operadores básicos: Para facilitar la
legibilidad de código y conseguir que los nuevos tipos de
datos que se definan a través de las estructuras estén en
el mismo nivel que los elementos predefinidos en el
lenguaje, se permite definir el significado de la mayoría
de los operadores (Incluidos el de la conversación),
cuando se aplique a diferentes tipos de objetos.
10. Extensión de modificadores: C# ofrece, a través de los
atributos, la posibilidad de añadir a los metadatos del
módulo resultante de la compilación de cualquier fuente
información adicional a la generada por el compilador que
luego podrá ser consultada en tiempo de ejecución a
través de la biblioteca de reflexión de .NET.
Eficiente: En C#, todo el código incluye numerosas
restricciones para garantizar su seguridad, no
permitiendo el uso de punteros. Sin embargo y a
diferencia de java, existen modificadores para saltarse
esta restricciones, pudiendo manipular objetos a traves
de punteros
11. Compatible: Para facilitar la migración de programadores de
C++ o Java a C#, no solo se mantiene una sintaxis muy
similar a la de los dos anteriores lenguajes, si no que
el CLR también ofrece la posibilidad de acceder a codigo
nativo escrito en funciones sueltas no orientadas a
objetos, tales como las DLLs de la API de Win32.
12. Paradigmas de C#C# es un lenguaje multiparadigma que incluye hasta 7
diferentes paradigmas los cuales son:
Estructurado: Es una técnica para escribir programas de una
manera clara para los que utilizan únicamente 3
estructuras:
❖Secuencia:Las instrucciones se ejecutan por orden
❖Selección: Que se compruebe una instrucción o un conjunto
segun una condicion y tomará uno de los caminos para
ejecutarse
❖Iteración: Que se repita la ejecución de una instruccion
mientras se compla una condicion
13. ● Imperativo: Describe la programación en términos del
estado del programa y sentencias que cambian dichos
estados. Los programas imperativos no son más que un
conjunto de instrucciones que le indican a la computadora
cómo realizar una tarea.
● Programación Orientada a Objetos: Usa objetos y sus
restricción para el diseño de programas. esta basado en
varias técnicas las cuales son:
❖Herencia: Las clases se relacionan entre si teniendo
cierta jerarquía de clasificación
❖Abstracción: Los objetos en el sistema sirven como modelo
de un agent abstracto que puede realizar el trabajo,
informar, y cambiar su estado y comunicarse con otros
objetos sin revelar como se implementan estas
14. ❖Polimorfismo: Son los comportamientos diferentes,
asociados a objetos distintos pueden compartir el mismo
nombre, al llamarlos por ese nombre se utilizará el
comportamiento correspondiente al objeto que se esté
usando.
❖Encapsulamiento: Es reunir todos los elementos que puedan
considerarse pertenecientes a una misma entidad al mismo
nivel de abstracción
15. Programación dirigida a eventos
la estructura como la ejecución de los programas van
determinados por los sucesos que ocurran en el sistema,
definidos por el usuario o que ellos mismos provoquen. (a
diferencia de secuencial o estructurada donde el programador
decide en cierta forma el flujo del programa, aquí es el
usuario quien dirige el flujo).
16. Programación genérica
Está centrada en los algoritmos que en los datos la idea de
esta forma de programar pretende generalizar las funciones
utilizadas y puedan ser usadas en más de una ocasión.
17. Reflexion
Es la capacidad que tiene un programa de ordenador para
observar y opcionalmente modificar su estructura de alto
nivel.
18. Entornos de desarrollo
Visual Estudio: Soporta múltiples lenguajes de programación:
C#, C++, Visual Basic.NET, F#, Java, PHP.
MonoDevelop: Entorno de desarrollo integrado libre y gratuito
diseñado primordialmente para C# y otros lenguajes .NET
19. ASPECTOS LÉXICOS
COMENTARIO: es texto que incluido en el código fuente
de un programa con la idea de facilitar su legibilidad a los
programadores y cuyo contenido es, por defecto, completamente
ignorado por el compilador.
Los comentarios son útiles para incluir notas personales o
destinadas a otros programadores.
20. // Hola Mundo! Programa en C#
/* "Hola Mundo!" Programa en C#.
De esta manera se puede ingresar un comentario
que tenga más de una línea, en caso de ser necesario */
21. IDENTIFICADORES: Es el nombre con el que
identificamos algún elemento de nuestro código, ya sea una
clase, una variable, un método, etc.
Un identificador será una secuencia de cualquier número de
caracteres alfanuméricos –incluidas vocales acentuadas y
eñes- tales que el primero de ellos no sea un número.
Por ejemplo,identificadores válidos serían:
Arriba, caña, C3P0,áëÎò, etc…
pero no lo serían:
3com, 127, etc...
22. PALABRAS RESERVADAS:
Las palabras reservadas son identificadores reservados
predefinidos que tienen un significado especial y no
se pueden utilizar como identificadores en sus
programas, excepto si llevan delante el carácter @
como prefijo.
Así, por ejemplo @for es un identificador válido, pero
no for ya que es una palabra reservada.
23. class @class
{
static void @static(bool @bool)
{
if (@bool)
Console.WriteLine("cierto");
else
Console.WriteLine("falso");
}
}
24. LITERALES: Un literal es la representación
explícita de los valores que pueden tomar los tipos
básicos del lenguaje. A continuación se explica cuál es
la sintaxis con que se escriben
los literales en C# desglosándolos según el tipo de
valores que representan:
25. *Literales enteros
Un número entero se puede representar en C# tanto en
formato decimal como hexadecimal. En el primer caso
basta escribir los dígitos decimales (<0-9) del número
unos tras otros, mientras que en el segundo hay que
preceder los dígitos hexadecimales (0-9, a-f, A-F) con
el prefijo 0x. En ambos casos es posible preceder el
número de los operadores + ó – para indicar si es
positivo o negativo, aunque si no se pone nada se
considerará que es positivo. Ejemplos de literales
enteros son 0, 5, +15, -23, 0x1A, -0x1a, etc
26. *Literales reales:
Los números reales se escriben de forma similar a los
enteros, aunque sólo se pueden escribir en forma
decimal y para separar la parte entera de la real usan
el tradicional punto decimal (carácter .)
Ejemplo: 0.0, 5.1, -5.1, +15.21
*Literales lógicos:
Los únicos literales lógicos válidos son true y false,
que respectivamente representan los valores lógicos
cierto y falso.
27. *Literales de carácter:
Prácticamente cualquier carácter se puede representar
encerrándolo entre comillas simples. Por ejemplo, 'a'
(letra a), ' ' (carácter de espacio), '?' (símbolo de
interrogación), etc
*Literales de cadena:
No es más que una secuencia de caracteres encerrados
entre comillas dobles.
Por ejemplo ″Hola, mundo″, ″camión″,
28. *Literal nulo:
es un valor especial que se representa en C# con la
palabra reservada null y se usa como valor de las
variables de objeto no inicializadas para así indicar
que contienen referencias nulas.
29. OPERADORES:
Un operador en C# es un símbolo formado por uno o más
caracteres que permite
realizar una determinada operación entre uno o más
datos y produce un resultado.
*Operaciones aritméticas:
Los operadores aritméticos incluidos en C# son los
típicos de suma (+), resta (-), producto (*), división
(/) y módulo (%) También se incluyen operadores de
“menos unario” (–) y “más unario” (+)
30. Relacionados con las operaciones aritméticas se
encuentran un par de operadores llamados checkedy
unchecked que permiten controlar si se desea detectar
los desbordamientos que puedan producirse si al
realizar este tipo de operaciones el resultado es
superior a la capacidad del tipo de datos de sus
operandos. Estos operadores se usan así:
checked (<expresión Aritmética>)
unchecked(<expresión Aritmética>)
31. *Operaciones lógicas:
&& y & (and), || y | (or), ! (not) y ^ (xor)
*Operaciones relacionales:
Se han incluido los tradicionales operadores de
igualdad (==), desigualdad (!=), “mayor que” (>),
“menor que” (<), “mayor o igual que” (>=) y “menor o
igual que” (<=)
*Operaciones de asignación:
Para realizar asignaciones se usa en C# el operador =,
operador que además de realizar la asignación que se
le solicita devuelve el valor asignado.
32. *Operaciones con cadenas:
Para realizar operaciones de concatenación de cadenas
se puede usar el mismo operador que para realizar
sumas, ya que en C# se ha redefinido su significado
para que cuando se aplique entre operandos que sean
cadenas o que sean una cadena y un carácter lo que
haga sea concatenarlos. Por ejemplo, ″Hola″+″ mundo″
devuelve ″Hola mundo″, y ″Hola mund″ + ′o′ también.
33. CLASES
Una clase es la definición de las características concretas
de un determinado tipo de objetos. Es decir, de cuáles son
los datos y los métodos de los que van a disponer todos los
objetos de ese tipo.
La sintaxis básica para definir una clase es la que a
continuación se muestra:
class <nombreClase> {
<miembros>
}
34. CAMPOS
Un campo es un dato común a todos los objetos de una
determinada clase. Para definir cuáles son los campos de los
que una clase dispone se usa la siguiente sintaxis dentro de
la zona señalada como <miembros> en la definición de la
misma:
<tipoCampo> <nombreCampo>;
35. HERENCIA
Las clases que derivan de otras se definen usando la
siguiente sintaxis:
class <nombreHija>:<nombrePadre>
{
<miembrosHija>
}
37. ESPACIOS DE NOMBRES
Constituye una forma lógica de organizar y estructura
nuestro código de forma que se puede organizar la
funcionalidad con un determinado sentido semántico.
namespace EspacioEjemplo
{
namespace EspacioEjemplo2
{
class ClaseEjemplo
{}
}
}
38. Sentencia using
La Directiva Using Tiene Tres Usos
• Para permitir el uso de tipos en un espacio de
nombres de manera que no tenga que calificar el uso de
un tipo en dicho espacio de nombres:
C#
using System.Text;
39. • Para permitirle acceder a los miembros estáticos de
un tipo sin tener que calificar el acceso con el
nombre del tipo:
C#
using static System.Math;
• Para crear un alias para un espacio de nombre o un
tipo. Esto se denomina una directiva de alias using.
C#
using Project = PC.MyCompany.Project;
40. Los espacios de nombres se utilizan en gran medida en
los programas de C# de dos maneras.
Primero, las clases de .NET Framework utilizan los
espacios de nombres para organizar sus diversas
clases.
Segundo, declarar sus propios espacios de nombres
permite ayudar a controlar el ámbito de la clase y los
nombres de método en proyectos de programación de
mayor tamaño..
41. VARIABLES Y TIPOS DATOS
VARIABLE:Una variable puede verse simplemente como
un almacén de objetos de un determinado tipo al que se
le da un cierto nombre. Por tanto, para definir una
variable sólo hay que decir cuál será el nombre que se
le dará y cuál será el tipo de datos que podrá
almacenar.
42. Los tipos de datos básicos son los siguientes:
String: Representa una cadena de caracteres.
Int: Representa un entero sin decimal.
Float: Representa un número con parte decimal o en
coma flotante de 32 bits.
Boolean: Representa un valor lógico.
Double: Representa un valor numérico en coma flotante
de 64 bits.
Objetc: Representa un objeto.
43. MÉtodos
Un método es un conjunto de instrucciones a las que se les
asocia un nombre de modo que si se desea ejecutarlas basta
referenciarlas a través de dicho nombre en vez de tener que
escribirlas.
La sintaxis que se usa en C# para definir los métodos es la
siguiente:
<tipoDevuelto> <nombreMétodo> (<parametros>) {
<instrucciones>
}
44. Propiedades
Una propiedad es una mezcla entre el concepto de campo y el
concepto de método.
● Ofrecen un mecanismo flexible para leer, escribir o
calcular los valores de campos privados.
● Son denominados descriptores de acceso
● Tienen acceso a los datos con facilidad, flexibilidad y
seguridad de los métodos
45. ● Comúnmente utilizadas para exponer y controlar
variables privadas
● Las propiedades que se implementan automáticamente
usan un campo oculto que sólo es accesible vía
propiedad.
46. Para definir una propiedad se usa la siguiente sintaxis:
<tipoPropiedad> <nombrePropiedad>
{
set
{
<codigoEscritura>
}
get
{
<codigoLectura>
}
}
47. El orden en que aparezcan los bloques de código set
(propiedades de solo lectura) y get (propiedades de solo
escritura) es irrelevante.
Es posible definir propiedades que solo tengan el bloque get
o que solo tengan el bloque set; lo que no es válido es
definir propiedades que no incluyan ninguno de los dos
bloques.
Las propiedades también poseen polimorfismo al igual que los
métodos
48. Estructuras
Una estructura es un tipo especial de clase pensada para
representar objetos ligeros.
Es un tipo de valor que se suele utilizar para encapsular
pequeños grupos de variables relacionadas.
49. Las estructuras pueden contener:
Constructores
Constantes
Campos
Métodos
Propiedades
Indizadores
Operadores
Eventos
Tipos anidados
50. Limitaciones
Dentro de una declaración de estructura, los campos no se
pueden inicializar a menos que se declaren como
constantes o estáticos.
Una estructura no puede declarar un constructor
predeterminado (un constructor predeterminado puede ser
un constructor que no tiene parámetros).
51. Propiedades
Las estructuras son tipos de valor, mientras que las clases
son tipos de referencias.
A diferencia de las clases, se pueden crear instancias de
las estructuras sin utilizar un operador new.
Las estructuras pueden declarar constantes, pero deben
utilizar parámetros
Una estructura no puede heredar de otra estructura o clase,
ni puede ser la base de una clase. Todas las estructuras
heredan directamente de System.ValueType, que hereda de
System.Object.
Una estructura puede implementar interfaces
52. ENUMERACIONES
Una enumeración o tipo enumerado es un tipo especial de
estructura en la que los literales de los valores que pueden
tomar sus objetos se indican explícitamente al definirla.
A los números que los métodos interpretan con significados
específicos se les suele denominar números mágicos su
utilización tiene los inconvenientes de que dificulta la
legibilidad del código y su escritura.
53. Una mejor alternativa para el método anterior es que tome un
parámetro de tipo Tamaño.
Estos literales también pueden ser usados por herramientas de
documentación, depuradores u otras aplicaciones para
sustituir números mágicos y mostrar textos muchos más
legibles.
Otra ventaja de usar enumeraciones frente a números mágicos
es que éstas participan en el mecanismo de comprobación de
tipos de C# y el CLR.
54. Sintaxis:
enum <nombreEnumeracion> : <tipoBase>
{
<literales>
}
Una enumeración es un tipo especial de estructura que sólo
puede tener como miembros campos públicos constantes y
estáticos.
El tipo por defecto de las constantes que forman una
enumeración es int, aunque puede dárseles cualquier otro tipo
básico entero.
55. Uso de enumeraciones
Las variables de tipos enumerados se definen como cualquier
otra variable (sintaxis <nombreTipo> <nombreVariable>).
Los literales de una enumeración son constantes públicas y
estáticas.
Los literales de una enumeración son constantes de tipos
enteros y las variables de tipo enumerado son variables del
tipo entero base de la enumeración.
56. INTERFACES
Una interfaz es la definición de un conjunto de métodos para
los que no se da implementación, sino que se les define de
manera similar a como se definen los métodos abstractos. Es
más, una interfaz puede verse como una forma especial de
definir clases que sólo cuenten con miembros abstractos.
La sintaxis general que se sigue a la hora de definir una
interfaz es:
<modificadores> interface <nombre>:<interfacesBase> {
<miembros>
}
57. INSTRUCCIONES
Es toda acción que se pueda realizar en el cuerpo de un
método, como definir variables, llamar métodos y realizar
diferentes asignaciones dentro del código.
{
<ListaInstrucciones>
}
58. Instrucciones Básicas
Variables Locales
las cuales son variables que se definen en el cuerpo de los
métodos y sólo son accesibles desde dichos cuerpos.
Asignación
Es simplemente una Instrucción mediante la que se indica un
valor en un dato.
59. Llamadas a métodos
Consiste en solicitar la ejecución de sus instrucciones
asociadas dando a sus parámetros ciertos valores.
Instrucción Nula
Es una instrucción que no realiza nada en absoluto. su
sintaxis consiste en escribir un simple punto y coma para
representarla
60. Instrucciones Condicionales
Son instrucciones que permiten ejecutar bloques de
instrucciones sólo si se da una determinada condición.
Instrucción If
Permite ejecutar ciertas instrucciones sólo si se da una
determinada Condición.
if (<Condición>)
<InstruccionesIf>
else
<InstruccionesElse>
61. Instrucción Switch
Permite ejecutar unos u otros bloques de instrucciones según
el valor de una cierta expresión.
switch()
{
case <valor1>: <bloque1>
<siguienteAcción>
case <valor2>: <bloque2>
<siguienteAcción>
…
default: <bloqueDefault>
<siguienteAcción>
}
62. Instrucciones Iterativas
Son instrucciones que permiten ejecutar repetidas veces una
instrucción o un bloque de instrucciones mientras se cumpla
una condición.
Instrucción While
Permite ejecutar un bloque instrucciones mientras se da una
cierta instrucción.
while(<condición>)
<instrucciones>
63. Instrucción Do While
La instrucción do...while es una variante del while que se
usa así:
do
<instrucciones>
while(<condición>);
Instrucción for
la instrucción for es una variante de while que permite
reducir el código necesario para escribir los tipos de bucles
más comúnmente usados en programación.
for(<inicialización>;<condición>;<modificación>)
<instrucciones>
64. Instrucción foreach
La instrucción foreach es una variante del for pensada
especialmente para compactar la escritura de códigos donde se
realice algún tratamiento a todos los elementos de una
colección, que suele un uso muy habitual de for en los
lenguajes de programación que lo incluyen.
foreach(<tipoelemento><elemento>in<colección>)
<instrucciones>
65. Instrucciones De Excepciones
Las excepciones son el mecanismo recomendado en la plataforma
.NET para la propagación de errores que se produzcan durante
la ejecución de las aplicaciones. Básicamente es un objeto
derivado de System.Exception que se genera cuando en tiempo
de ejecución se produce algún error y que contiene
información sobre el mismo.
66. Instrucciones de Salto
Permiten ejecutar variar el orden normal en que se ejecutan
las instrucciones de un programa, que consiste en ejecutarlas
unas tras otra en el mismo orden en que se hubiesen escrito
en el fuente.
➔Instrucción Break
➔Instrucción Continue
➔Instrucción Return
➔Instrucción Goto
➔Instrucción Throw
67. Otras Instrucciones
➔Instrucciones Checked y Unchecked
➔permiten controlar la forma en que tratan los
desbordamientos que ocurran durante la realización de
operaciones aritméticas con tipos de básico entero.
➔Instrucciones Lock
➔Es útil en aplicaciones concurrentes donde múltiples
hilos pueden estar accediendo simultáneamente a un mismo
recurso.
68. CÓDIGO INSEGURO
Es todo aquel fragmento de código en C# dentro del cual es
posible hacer uso de punteros.
Uso puntero en C# es una variable que es capaz de almacenar
direcciones de memoria. Generalmente suele usarse para
almacenar direcciones que almacenan objetos, por lo que en
esos casos su significado es similar al de variables normales
de tipo de referencia.