1.- Elementos básicos de un programa.

Programa

La definición más diafana y directa nos la proporciona la RAE:

"Conjunto Unitario de instrucciones que permite a una computadora realizar funciones diversas, como el tratamiento de textos, el diseño de gráficos, la resolución de problemas matemáticos, el manejo de banco de datos, etc."

Variable

Es una entidad que almacena (por lo tanto, recupera) datos que serán utiles en un programa. Entonces, cuando hacemos uso de esta entidad podemos: Almacenar Datos y/o estados, Asignar valores a una variable o intercambiarlos de una variable a otra, Representar sus valores dentro de una expresión matemática , Mostrar su valor por pantalla o una API etc.

Para cumplir todas estas funciones eficientemente, las variables deben tener definido de que 'Tipo' son. Tendremos variables que representan nros. enteros o decimales, caracteres y hasta colecciones de datos.

En los lenguajes fuertemente tipados es imperativo la declaración del tipo de la variable en su definición. No lo podremos cambiar, pero si transformar. C# es un lenguaje de programación fuertemente tipado. Python es dinamicamente tipado. Haga una investigación particular sobre Java, C++ y PHP respecto a su tipo de tipado.

Entonces, en la declaración de una variable en C# seguiremos esta convención para declarar una variable:

Tipo de Datos - Identificador de la Variable - Valor almacenado.

Ejemplo:

int NumeroDeInscritosEnProgr_2 = 3;

De lo anterior, podemos deducir algunas reglas para la declaración de variables:

Teniendo esto claro podemos preguntarnos, ¿de qué tipos me es permitido declarar variables?

bool Es una variable booleana, es decir que solamente puede guardar los valores verdadero o falso (true o false) en términos de C#.
byte Puede guardar un byte de información. Esto equivale a un valor entero positivo entre 0 y 255.
sbyte Guarda un byte con signo de información. Podemos guardar un valor entero con signo desde –128 hasta 127.
char Puede guardar un carácter de tipo Unicode.
decimal Este tipo puede guardar un valor numérico con decimales. Su rango es desde ±1.0 ? 10?28 hasta ±7.9 ? 1028.
   
double También nos permite guardar valores numéricos que tengan decimales. El rango aproximado es desde ±5.0 ? 10?324 hasta ±1.7 ? 10 308.
float Otro tipo muy utilizado para guardar valores numéricos con decimales. Para este tipo el rango
es desde ±1.5 ? 10?45 hasta ±3.4 ? 1038.
int Cuando queremos guardar valores numéricos enteros con signo, en el rango de -2,147,483,648
hasta 2,147,483,647.
uint Para valores numéricos enteros positivos, su rango de valores es desde 0 hasta 4,294,967,295.
long Guarda valores numéricos enteros realmente grandes con un rango
desde –9,223,372,036,854,775,808 hasta 9,223,372,036,854,775,807.
uling Guarda valores numéricos enteros positivos. Su rango de valores varía desde 0
hasta 18,446,744,073,709,551,615.
short Guarda valores numéricos enteros, pero su rango es menor y varía desde -32,768 hasta 32,767.
ushort Puede guardar valores numéricos enteros positivos con un rango desde 0 hasta 65,535.
string Este tipo nos permite guardar cadenas.

Operaciones Aritmeticas:

Diversos tipos de operaciones pueden ser aplicadas a las variables. En el ejemplo anterior, a la variable NumeroDeInscritosEnProgr_2 le aplicamos la ASIGNACIÓN. Para esto, usamos el simbolo "=". 

Estas operaciones son posibles:
= Asignación: Este operador ya es conocido por nosotros.
+ Suma: Nos permite sumar los valores de las variables o los números
- Resta: Para restar los valores de las variables o los números.
* Multiplicación: Multiplica los valores de las variables o los números.
/ División: Divide los valores de las variables o los números.
% Módulo: Nos da el residuo de la división.

Es importante tener en cuenta, que el lugar que usemos estos operadores incide en el resultado final de nuestra operación. A esto le llamaremos Precedencia de Operadores (es muy importante el uso correcto de la terminología).

Clasificación de las variables respecto a su utilidad

Auxiliar: También llamada variable temporal, nos servirá para almacenar un valor momentaneamente mientras efectuamos operaciones sobre las variables.

Ejemplo:

   c = a;
   a = b;
   b = c;

Acumuladora: Sirven para almacenar un número y sus valores consecutivos. Ejemplo, si empieza por 0, luego tendrá el valor de 1, 2, 3, 4…
Suelen estar dentro de ciclos (clase 3) en un programa.

Ejemplo: Si un ciclo 

int TazaDeCambioDelDolar = 0;
//inicio del ciclo
..
...

TazaDeCambioDelDolar += 10000;
//fin del ciclo

De Estado: Las variables de estado se utilizan para saber como se encuentra un objeto en cada momento. La más simple podría ser una variable booleana, dónde su valor sería true o false.
Pero también sirven para definir varios estados. Por ejemplo, si tiene una CLASE (?)(1) 'Carro'; puede declarar variables que muestren si este se encuentra 'Detenido', 'En Marcha' etc.
El mismo objeto actuaría de manera diferente dependiendo del estado en el que se encuentra.

Otro Ejemplo:

bool ObstinadoPorLosApagones = true;

(1) No tenga dudas ni vacilaciones en preguntarle a su Profesor. Para esto, el esta alli. 

Teniendo claro esto, hagamos un primer programa en C#

Desde su IDE de preferencia:

using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Text.RegularExpressions;
      
      namespace Rextester{
          public class Program{
              public static void Main(string[] args){
                  Console.WriteLine("Hola Programación2");
              }
          }
      }

Aunque tenemos poco tiempo, no tenemos en este momento que entender todo lo que esta aqui; lo haremos en la medida que avanze el curso. Enfoquemonos en esta sección del codigo:

Console.WriteLine("Hola Programación2");

 Si no lo ejecuto ya, intuitivamente llegamos a la conclusion que esto muestra en pantalla la cadena de caracteres: Hola Programación2; si no, ejecutela ya mismo!. El método (2) que ejecuta la impresión en pantalla es WriteLine.

(2) No tenga dudas ni vacilaciones en preguntarle a su Profesor. Para esto, el esta alli. 

Si aplicamos lo que hemos aprendido de variables, obtendriamos el mismo funcionamiento si declaramos la variable:

string Saludo = "Hola Programación2";

queda de su parte, ubicar la variable en su lugar correcto para que funcione como el original.

2.- Estructuras selectivas

Cuando ud. programa, es necesario indicarle que instrucciones se ejecutaran a partir de una toma de decisiones. Para lo primero disponemos del bloque de codigo. Para lo segundo tenemos dos instrucciones que nos ayudaran con esto: if y switch.

Pero antes, debemos entender como comparar expresiones para asi tomar decisiones y ejecutar determinadas instrucciones. Para esto, tenemos los operadores relacionales. Los operadores relacionales son símbolos que se usan para comparar dos valores. Si el resultado de la comparación es correcto la expresión considerada es verdadera, en caso contrario es falsa.

Igualdad ==
No Igual !=
Mayor que >
Menor que <
Mayor o igual que >=
Menor o igual que <=

 

Entonces si declaramos que:

int a = 3;
int b = 6;
int c = 9;

 y si exponemos estas expresiones:

a==a  true
b>=c  false
a!=7  true
c<=a  false
b<a  false

 

Entendiendo bien esto podemos indicarle a un programa como tomar decisiones a partir de la evaluación de estas expresiones. 

Comenzamos con el comando if.

IF

Sintaxis:

if (expresión) 'sentencia a ejecutar'

La expresión permite decidir SI el programa ejecutara determinada sentencia o bloque de código.

¿Qué es un bloque de código? Es un conjunto especifico de sentencias que se ejecutan secuencialmente desde su inicio al fin.  En C# los bloques de código se definen con el uso de las llaves { }.

Un  ejemplo inicial usando las expresiones iniciales 

if (a>0){

           Console.WriteLine("El valor de a es Mayor que Cero");

}

Si queremos indicar que hacer a parti de la negación de la expresión, tendremos que usar 'else'.


if (b<c){

           Console.WriteLine("Evaluando los valores de variables. b es mayor");

}

else {

           Console.WriteLine("Evaluando los valores de variables. c es mayor");

}

SWITCH - CASE

Utilize esta sentencia cuando necesite escoger la ejecución especifica de un bloque de código entre varios.

Sintaxis:

switch(expresion) 
{
  case x:
    // bloque de Código_1
    break;
  case y:
    // bloque de Código_2
    break;
  default:
    // bloque de Código_3
    break;
}

Ejemplo:

int Nro_DiaDeLaSemana = 6;
switch (Nro_DiaDeLaSemana) 
{
  case 6:
    Console.WriteLine("Hoy es Sábado");
    break;
  case 7:
    Console.WriteLine("Hoy es Domingo");
    break;
  default:
    Console.WriteLine("Llegando al fin de Semana");
    break;
}

 

3.- OOP - Intro y Abstracción

Algunos paradigmas de programación fueron creados y ampliamente usados antes de la irrupción de la programación Orientada a Objetos. Lo disruptivo de la OOP fue que, en lugar de intentar ajustar un problema que quisieramos resolver a un lenguaje de programación, lograba que los lenguajes de programación crearan estructuras que eran abstracciones de los interactuantes reales de los problemas que deseabamos resolver. Una Única Unidad tanto de datos (atributos) como de las funciones (métodos) que operan sobre esos datos. Esta Unidad a la que nos referimos, es el objeto.

Entonces, ¿qué es un objeto?

Objeto:

Entidad individual de un sistema que se caracteriza por tener:

UN ESTADO Y UN COMPORTAMIENTO

Estado: Son los valores que toman sus datos.

Comportamiento: Definido por los métodos de la clase que originará el objeto.

Clase:

Es la plantilla de donde se generan cuantos objetos necesites.

Propiedades:

Abstración:

Como en la vida real, la abstracción es ocuparse de los aspectos más importantes de un punto de vista determinado y no de otros. Es decir, la abstracción diferencia entre las propiedades externas de una unidad y los detalles internos de la misma.

Abstracción es entonces, una técnica para reducir la complejidad.

En OOP, significa concentrarse en que es? y que hace? un objeto y no en como debe implementarse.

Niveles de abstracción: Grado de complejidad de una abstracción.

TAD: Describe los atributos y comportamiento de un objeto.