Bienvenidos a este nuevo capítulo de este Curso Gratis de Programación #6 Pilares de la Programación Orientada a Objetos. La programación Orientada a Objetos nace de los problemas creados por la programación estructurada.

Tabla de contenidos

¿Te gustaría enterarte de cuando lanzamos descuentos y nuevos cursos?

4 Pilares:

  • Abstracción: Determinación de las características de los objetos, que sirven para identificarlos y hacerlos diferentes a los demás.
  • Encapsulamiento: Es el proceso que agrupa y almacena los elementos que definen la estructura y el comportamiento de una abstracción, en un mismo lugar.
  • Herencia: Propiedad donde se pueden crear clases a partir de clases ya existentes.
  • Polimorfismo: Es la capacidad que tienen los objetos de diferentes clases para responder a un mismo mensaje de manera específica para cada uno.

Abstracción

La abstracción es una aproximación que hace hincapié en los aspectos más importantes de algo, sin preocuparse por los detalles menos relevantes. Abstracción es “cualquier modelo que incluye los aspectos más importantes, esenciales o distinguibles de algo mientras suprime o ignora los detalles menos importantes, inmateriales o que pueden distraer”.

La abstracción es específica del dominio. Por ejemplo, la abstracción Persona es distinta en un dominio de censos electorales que en un dominio hospitalario. En el cuadro La traición de las imágenes), del pintor surrealista René Magritte aparece dibujada una pipa, bajo la cual se lee la frase (Esto no es una pipa).

Efectivamente, el cuadro es una abstracción o modelo de una pipa, no una pipa (cuán sutiles eran los surrealistas). En el cuadro se han perdido muchas cosas: la tridimensionalidad de la pipa real, sus pequeñas imperfecciones, el humo, etc. Si se desea explicar a alguien qué forma tiene una pipa, el cuadro de Magritte es una buena abstracción o modelo de una pipa real.

No sería una buena abstracción si, se quisiera fabricarla en serie. El cuadro no aporta información sobre las dimensiones o sobre la madera de la que está hecha. En la ingeniería del software y en la OO es fundamental partir de buenas abstracciones del problema que vaya a abordarse.

Entonces, ¿Qué es la abstraccion?

El código fuente de un programa es, al igual que el cuadro de Magritte, una abstracción o modelo: en lugar de representar una pipa, representa un programa. Un programa es una serie de señales eléctricas variables que se propagan en un determinado hardware, no unas líneas de código escritas en un papel o en un editor de texto.

Si Magritte hubiera usado computadoras, quizás habría pintado un cuadro en que aparecieran unas cuantas líneas de código encabezadas por el siguiente comentario: Esto no es un programa. En la orientación a objetos, las clases (de objetos) son la abstracción fundamental. Mediante la abstracción, se parte de unos pocos casos concretos (objetos) de entidades reales o conceptuales y se generan clases.

Como hemos visto el uso de la abstracción durante el análisis OO consiste en estudiar los conceptos fundamentales del dominio bajo estudio, obviando temporalmente las decisiones de diseño o implementación. En una clase de software, la abstracción se muestra en que los nombres de la clase y de los atributos se almacenan una vez en cada clase, en lugar de una vez por instancia. Si se desea que todas las instancias de una clase tengan un nuevo atributo o método, basta añadirlo a la clase.

Mediante la abstracción, se intenta distinguir las características esenciales de un objeto y resaltar la simplicidad sobre el mismo, ya que se minimiza el resto de los detalles y características que definen a un objeto. La abstracción nos permite definir a un objeto en su forma más general sin tener en cuenta sus detalles internos.

  • La abstracción es un proceso en el cual se identifican las características y el comportamiento relevantes de un objeto.
  •  Los agentes externos solamente conocen la interfaz del objeto.
  • La abstracción provee al usuario lo que necesita conocer.

Entonces ¿Qué es la Abstracción?

La abstracción es uno de los principios más importantes en la ingeniería de software orientada a objetos y está estrechamente relacionada con varios otros conceptos importantes, como la encapsulación, la herencia y el polimorfismo. La abstracción se aplica en el proceso de identificación de artefactos de software (objetos) para modelar el dominio del problema. Es el proceso de reducir estos objetos a su esencia de tal manera que solo se representan los elementos necesarios.  La abstracción define un objeto en términos de sus propiedades, funcionalidad e interfaz (medios de comunicación con otros objetos)

Abstracción es la acción o efecto de abstraer o abstraerse, es Separar por medio de una operación intelectual un rasgo o una cualidad de algo para analizarlos aisladamente o considerarlos en su pura esencia o noción”. La abstracción es el acto de representar características esenciales sin incluir los detalles o explicaciones de fondo. 

En el dominio de la informática y la ingeniería de software, el principio de abstracción se utiliza para reducir la complejidad y permitir un diseño e implementación eficientes de sistemas de software complejos. Algunas áreas donde se aplica el principio de abstracción incluyen lenguajes de programación (principalmente en orientados a objetos), lenguajes de especificación, abstracción de control, abstracción de datos y la arquitectura de los sistemas de software.

Más precisamente se puede decir que la abstracción es la calidad de tratar con ideas en lugar de hechos.  Cuando considera el caso del correo electrónico, detalles complejos como lo que sucede tan pronto como envía un e mail, el protocolo que utiliza su servidor está oculto para el usuario. 

para enviar un e mail, solo necesita escribir el contenido, mencionar la dirección del destinatario y hacer clic en enviar. Del mismo modo, en la programación orientada a objetos, la abstracción es un proceso de ocultar los detalles de la implementación al usuario, solo se le proporcionará la funcionalidad.  En otras palabras, el usuario tendrá la información sobre lo que hace el objeto en lugar de como lo hace. En Java, la abstracción se logra utilizando interfaces y clases abstractas.

Modularidad

Es la propiedad que tienen ciertos productos (o procesos) de descomponerse en subproductos (o subprocesos) más sencillos y manejables. Un producto modular se fabrica a partir de componentes estandarizados intercambiables (módulos). La modularidad se emplea para un gran número de productos: programas de computadora, automóviles, ordenadores, bicicletas, aviones, centrales eléctricas… Un módulo puede ir desde lo más simple (un recambio de tinta para un bolígrafo, p. ej.) a lo más complejo (un circuito de seguridad en una central nuclear, p. ej.).

Según el Dictionary of OT, la modularidad es “la descomposición lógica de las cosas (por ejemplo, responsabilidades y software) en agrupaciones simples, pequeñas (por ejemplo, requisitos y clases, respectivamente), que aumentan las posibilidades de lograr las metas de la ingeniería de software”.

En sentido general, un módulo es cualquier parte identificable de un sistema y que tiene sentido por sí mismo. Tanto en la ingeniería del software como en otras ingenierías, los módulos que interesan son aquellos cuyos elementos estructurales están fuertemente vinculados entre sí y débilmente vinculados con elementos de otras unidades.

Cuando nos restringimos a software, un módulo es un conjunto de sentencias bajo el paraguas de un nombre por el cual puede ser llamado o invocado. Los módulos son la unidad de programación. En Java, una clase constituye un módulo, pero eso no quiere decir que toda clase de Java sea un “buen” módulo. Las características deseables de un módulo, las que aumentan su modularidad, son las siguientes:

Alta cohesión.

La cohesión mide el grado de relación funcional interna de los componentes de un módulo. En la ingeniería del software, la cohesión se traduce en una medida del grado en que las líneas de código dentro del módulo colaboran para ofrecer una función concreta. Los módulos con cohesión alta son deseables porque la alta cohesión se relaciona con programas robustos (no fallan ante entradas inesperadas o erróneas), reutilizables (partes del programa se pueden emplear en otros programas), legibles (fáciles de entender) y compactos (no más largos de lo necesario).

Bajo acoplamiento.

El acoplamiento mide la interconexión entre módulos. En la ingeniería del software, el acoplamiento se traduce en una medida de la relación entre líneas de código pertenecientes a módulos diferentes. Lo dicho con respecto las ventajas de la alta cohesión se aplican también al bajo acoplamiento, pues el bajo acoplamiento suele implicar alta cohesión, y viceversa. La idea de construir aplicaciones juntando módulos de software estandarizados e intercambiables proviene de la producción industrial en serie.

Ejemplo en la historia

La modularidad, Además de ser relevante en muchos sectores industriales, desempeñó un importante papel en la derrota alemana en la II Guerra Mundial. Alemania fabricaba muchos modelos distintos de tanques, aviones y barcos, cada uno con piezas exclusivas y que, por tanto, no podían intercambiarse con las de otros modelos. En el caso de los tanques, la falta de modularidad era extrema: el uso de distintas piezas para cada modelo (Pzkw IV, Tiger, King Tiger, Panther, Hetzer, Ferdinand, Elephant, etc.), a menudo con acabados casi artesanales, se veía como una prueba indiscutible de la superioridad técnica alemana. Consecuentemente, en los campos de batalla se juntaban tanques completamente distintos, lo que dificultaba sobremanera el abastecimiento de piezas y las reparaciones.

Al final, la falta de componentes estandarizados hacía que muchos  Tanques alemanes se abandonaran cuando se averiaban. En el caso de los submarinos, Otto Merker, director general del Comité Principal para la Construcción de Navíos, investigó cómo podía mejorarse la fabricación de submarinos y recomendó que se fabricaran de forma modular; pero el destino de la Alemania nazi estaba ya sellado cuando se aprobó la producción en serie de los nuevos diseños modulares (agosto de 1943). Estados Unidos y la Unión Soviética, por el contrario, apostaron desde el principio de la guerra por la producción en serie y la modularidad forzosa:

fabricaban uno o dos modelos de cada tipo de transporte de tropas, de manera que cada componente o pierza era, por definición, estándar o casi estándar. En el caso estadounidense, la influencia de Henry Ford resulta evidente: él mismo preparó unas instalaciones industriales para la producción en serie de los bombarderos Flying Fortress.

La velocidad con la que se fabricaron los barcos de carga Liberty fue posible porque se adoptaron técnicas de ensambladura modular. En el caso soviético, el uso de sólo dos tipos de tanques (el famoso T-34 y  el KV-2) se reveló decisivo para reducir el número de tipos de piezas que había que fabricar y para facilitar, en condiciones muy difíciles, el abastecimiento y las reparaciones. cierto que el T-34 tuvo tres grandes submodelos –T34/76a, T34/76b y T34/76c–, pero sólo diferían en el cañón o en la torreta; el resto de las piezas eran completamente intercambiables entre modelos.) El T-34 fue crucial en la batalla de Kursk, que hizo que Alemania perdiera la iniciativa en el frente ruso: a partir de entonces, la Unión Soviética fue la que marcó el paso

La herencia.

El Paradigma Orientado a Objetos permite que una clase “herede” atributos y comportamiento comunes a otra clase. En el desarrollo de un problema usando el Paradigma Orientado a Objetos, algunas de las clases definidas se pueden dividir en clases más específicas, logrando de esta forma que clases más generales se dividan en subclases.

  • La clase que es dividida se la conoce como “superclase” o “clase padre” de las clases específicas.
  • A las clases más específicas se las conoce como “subclases” o “clases hijas” de la clase más genérica.
  • A las relaciones de herencia también se las denomina relaciones de extensión o generalización.

Cuando una clase A hereda las propiedades otra que sea hija de otra superclase, y ésta de otra, y así sucesivamente, entonces la clase A hereda las propiedades de todas estas clases superiores. Las subclases se pueden dividir en otras subclases. La definición de una subclase se basa en la definición de la superclase de la cual extiende y puede especificar su propio conjunto de atributos y métodos únicos a la subclase. 

Clases y sub clases

Un objeto o instancia de una subclase no sólo contiene los atributos y métodos definidos en la subclase, sino que también hereda los atributos y métodos definidos en la superclase. Las relaciones de herencia no se limitan a un solo nivel, también se pueden extender a varios niveles. Esto da como resultado un árbol jerárquico en el que a medida que descendemos por el mismo, las clases son más específicas y van especializándose debido a que vamos agregando nuevos atributos y métodos en las clases más específicas.

Por medio de la Herencia se hace uso de una clase para tomar sus propiedades y poder utilizarlas en clases más especializadas.

Para sobrescribir un método en una subclase, el método sobrescrito debe  tener la misma firma que el método de la superclase (mismo nombre, mismos parámetros y mismo tipo de dato a devolver).

La redefinición de métodos permite que una subclase o clase  hija sobrescriba un método definido en la superclase o clase  padre. La implementación definida en la clase hija sobrescribe  la implementación de la clase padre.

Ventajas de la Herencia

Desarrollo de modelos más naturales e intuitivos por medio de relaciones jerárquicas.

 Reutilización de código: cuando se crea una nueva clase derivada, la misma contiene las propiedades definidas en su clase padre sin la necesidad de tener que reescribir el mismo código que represente dichas propiedades.

Solamente es necesario hacer referencia a la clase padre. De esta forma se logra un ahorro de tiempo y esfuerzo.

 Extensibilidad: a partir del desarrollo inicial de una clase base se pueden desarrollar clases más específicas o con nuevas funcionalidades en cualquier momento que sea necesario.

La Herencia es una característica importante para la resolución de problemas utilizando el Paradigma Orientado a Objetos. La Herencia nos permite descomponer un concepto en varias partes y niveles jerárquicos logrando una mayor organización del problema.

Por otro lado, el uso de esta característica mejora la reutilización de código ya que evita tener que definir varias veces el mismo conjunto de atributos y métodos que son comunes a varias clases.

La Herencia es una propiedad importante del Paradigma Orientado a Objetos por medio de la cual una clase adquiere las propiedades definidas de otra clase.

Si esta propiedad es utilizada correctamente se pueden obtener grandes ventajas que hacen que nuestro sistema sea más flexible y organizado.

Creas una clase A y una clase B que puede ser hija de la Clase A. La clase B es idéntica a la clase A. Esto es Herencia Simple. Ej java solo se permite herencia simple. En la herencia múltiple como en Python pueden tener varios padres.

Ventajas:

  • Ahorro de tiempo
  • Utilizar clases como base.

Desventajas:

  • Muchas herencias entre clases son difíciles de manejar
  • Cuidado con las cantidad de atributos y métodos

Jerarquía

la jerarquía es “cualquier clasificación u ordenación de abstracciones en una estructura de árbol. Tipos: Jerarquía de agregación, jerarquía de clases, jerarquía de herencia, jerarquía de partición, jerarquía de especialización, jerarquía de tipo”. Las jerarquías se han utilizado desde hace mucho tiempo en las ciencias naturales para clasificar a los seres vivos. Con ello no quiero decir que los primeros botánicos o zoólogos pudieran ser, de haber vivido en esta época, unos extraordinarios programadores; sino que entendieron desde el  principio la importancia de dividir los  problemas en una jerarquía de ideas. Quizás Aristóteles fuera un poco desencaminado en cuanto a los detalles, pero andaba bastante acertado en cuanto a las ideas generales. Los dos tipos de jerarquía más comunes son la jerarquía de generalización/especialización (“Una nevera es un electrodoméstico”) y la de todo/parte (“Una mesa se compone de cuatro patas y una superficie”)

Un ejemplo de jerarquía del tipo generalización/especialización. Por ejemplo, toda persona es un mamífero, pero no todo mamífero es una persona.

La jerarquía de generalización/especialización se basa en que las propiedades de una categoría general se transmiten a todas las categorías que la especializan. Se suele aludir a esta jerarquía con la regla “es un” o “es un tipo de”, pues una categoría especializa a otra si es un tipo de la segunda. En la OO, el término jerarquía de clases significa un conjunto de clases relacionadas por la jerarquía de generalización/especialización. En una jerarquía de clases, una clase es una especialización (subclase o clase “hija”) de otra (superclase o clase “madre”) cuando representa, con respecto a la superclase, un elemento más específico en el dominio modelado. Las subclases heredan los atributos de la superclase.

En los sistemas de software

En los sistemas de software, la jerarquía de generalización/especialización suele implementarse mediante la herencia. Este término designa la facultad que tienen algunos lenguajes OO –no todos: véase la segunda parte del tutorial– de formar nuevas clases usando clases ya existentes. Las clases derivadas o subclases heredan los atributos y métodos de su superclase, sin que tengan que volver a implementar los  métodos ni declarar los atributos.  Muy relacionado con la herencia se encuentra el polimorfismo. Aunque se trata con detalle en la 2ª parte del tutorial, adelanto aquí que el polimorfismo permite sobrescribir en las subclases los métodos de la superclase. Un método es la implementación de una operación para una clase. El polimorfismo permite que una misma operación esté asociada a métodos distintos en clases diferentes.

A diferencia de lo que ocurre con los lenguajes estructurados, en los lenguajes OO sucede que el método con que se responde a un mensaje depende del objeto concreto al que se envía. Por ejemplo, consideremos una subclase CuentaMancomunada que reescribe el método sacarDinero() de una superclase CuentaBancaria. Cuando un objeto CuentaBancaria reciba un mensaje sacarDinero transferirá el  dinero; cuando un objeto CuentaMancomunada reciba ese mismo mensaje, antes de transferirlo comprobará que la operación está solicitada por todos los titulares de la cuenta, y si no es así anulará la operación y enviará un mensaje de aviso. En ambos casos se envía el mismo  mensaje (la petición es la misma: sacar dinero), pero el comportamiento final depende del objeto que lo recibe.

En un programa, una misma variable puede representar, conforme se va ejecutando el programa, distintos tipos de objetos. Por tanto, también puede llamarse a   distintos métodos de la variable durante el tiempo de ejecución. Como se vio en 3.3, la metodología estructurada se basa en la abstracción por descomposición. La OO incluye también la descomposición como un mecanismo de abstracción y la complementa con la jerarquía de generalización/especialización, que se  basa en la abstracción por clasificación. En mi opinión, la abstracción por clasificación no tiene equivalente en la metodología estructurada y constituye, por tanto, una característica novedosa de la OO. A fecha de hoy, el debate de la evolución-revolución de la OO frente a la metodología estructurada continúa abierto.

Junto con la modularidad y la encapsulación, la herencia es responsable del éxito de la programación orientada a objetos, por cuanto permite la reutilización del código OO. La correcta utilización de la herencia, la modularidad y la encapsulación permite concebir los programas OO como una unión de “cápsulas” intercambiables con otros programas, las cuales pueden transmitir sus propiedades (atributos y métodos) a nuevas “capsulas”, evitándose así tener que desarrollarlas desde cero. En los sistemas de software, el mantenimiento ha supuesto siempre un coste muy grande. Esas tres propiedades permiten reducir el coste de las modificaciones que sufren los programas según se van mellando por el contacto con la realidad.

Que es una clase? La definición de un objeto

podemos definirla como un modelo o prototipo que define los atributos y métodos comunes a todos los objetos de ciertas características similares. Una clase es un modelo que define una estructura compuesta por atributos y métodos. Una clase no solamente define los atributos que todas las  instancias de su tipo tendrán en común, sino que también  define qué comportamiento tendrán en común, es decir qué acciones o métodos podrán ejecutar las instancias de esta clase. clase abstracta: se define como aquella clase que es utilizada para derivar a partir de ella otras clases, pero no podemos crear objetos a partir de dicha clase, es decir, no hay instancias directas de la misma.

Siempre que creas un objeto debe definir una clase. Sin clases no hay objetos. Por defecto los LOO tiene una super clase llamada objeto. Leguajes como java ya tienen varias clases pre definidas. Los objetos Tienen 3 partes principales

  • Atributos
  • Métodos
  • Constructor

Atributos:

  • Son las características
  • Definen al objeto

Métodos

  • Son las acciones que puede realizar un objeto
  • Se puede crear o derribar
  • Existe el método constructor

Constructor

  • Se ejecutan cuando creas el objeto
  • Lleva el mismo nombre de la clase
  • Puedes tener varios

Necesitas saber los parámetros para crear el objeto indicado y necesario. Se suele utilizar la palabra NEW o CREATE. Según la sintaxis y las palabras reservadas. Cuando creas un objeto, se le da vida. El SO reserva la memoria para estar vivo y se la entrega, nadie más la puede usar. Mas objetos más memoria. Por eso en video juegos se gastan tantos recursos. Con una sola plantilla puedo crear muchos objetos. En mi clase Se puede definir varios constructores con diferentes necesidades y así reciclar el código. Así el objeto tiene diferentes características.

Las clases como forma de encapsular

En Java, las clases son usadas para agrupar y manejar los detalles de métodos relacionados. Por ejemplo, la clase de sistema provista por el JDK, java. Lang. Math, contiene funciones matemáticas simples y funciones trigonométricas entre otras. De manera similar, cuando construimos un programa, escribimos una sola clase que contiene todos los métodos que sirven para correr nuestro programa.

Una aplicación típica de POO debiera consistir en varias clases y una de ellas, solo una, contener el único punto de inicio: el método main junto a los métodos generales, es decir que sirven a toda a la aplicación, por ejemplo, como un menú de llamada a los distintos métodos ubicados en las restantes clases de la aplicación. Cuando todos los métodos que necesitamos han sido escritos, deberán ser convocados desde esta clase principal.

Esta clase es nuestro programa. Las clases, a su vez, pueden estar contenidas en packages(paquetes). Las clases de sistema, por ejemplo, la clase Math mencionada antes, se encuentra en el packagejava.lang. A veces, el nombre de la clase es interpretado como el path de directorios donde está ubicado el package. La mayoría de los programadores escriben sus clases dentro del directorio donde están trabajando. Este es llamado el default package(paquete por defecto).

Todas las clases dentro del default package están disponibles para el programa principal (o la clase donde está el método main). Luego, es posible que un programa esté compuesto por métodos guardados en diferentes clases. En un videojuego uno podría imaginar que una clase contiene todos los métodos que soportan los gráficos, otra guarda los métodos de puntuación y la última guarda las rutinas relacionadas con el dispositivo de input(teclado, mouse, etc.). Con esto queda claro que el método main debe ser declarado public, de otra forma no podríamos correr el programa.

Estructura de una Clase

Ejemplo

Nombres de métodos

Los programas grandes conllevan un esfuerzo importante en su planificación. En la práctica, la construcción de programas no triviales requiere el uso de un gran número de componentes, usualmente asociados a diferentes funciones lógicas o distintos objetos dentro de los programas.

  • En Java este tipo de modularización depende fuertemente del uso de métodos. Si consideramos que tenemos que realizar las siguientes tareas de programación:
  • El cálculo de una lista del primer millón de números primos. Es claro que un componente de ese programa es calcular si un número es o no primo.
  • La construcción de un procesador de textos.
  • El manejo de la ventana de ayuda es una porción lógica aislada del programa.
  • El lanzamiento de una nave espacial. Las pruebas previas al vuelo las hace (en algún nivel) una entidad lógica aislada. A su vez, estas pruebas pueden estar agrupadas en varios módulos.

En cada una de estas tareas, algunas características aparecen aisladas. Aún cuando no sepamos como están programadas, nosotros podemos estar confiados de que el código que las soporta está aislado dentro del programa. En la mayoría de los lenguajes de programación, el método (procedimiento o función) es usado para implementar código que realiza una tarea específica y bien documentada. 

La declaración del método main

El método organizacional que identifica los componentes lógicos de un proceso complejo y realiza esas tareas con sus propios procedimientos es llamado abstracción procedural y Esla forma más básica que se encuentra en la mayoría de los lenguajes de programación.  En realidad, ya hemos visto un método: el método main. Siempre que corremos una aplicación, Java, localiza el método main y ejecuta sus instrucciones en orden. Usted puede probar esto escribiendo un programa con dos métodos: main y maine.  Cuando corremos el programa, las únicas instrucciones que se ejecutan son aquellas que se encuentran en el método main.

La declaración del método main siempre debe ser:

public static void main(String args[])

La palabra reservada public indica que este método está disponible para ser usado fuera de la definición de clase que lo contiene. En particular, esto hace posible que se pueda llamar al método main para que sea corrido. Si el método no fuera public, podría ser declarado protected o private, haciendo imposible que desde otra clase selo pueda usar o referenciar. La palabra reservada static indica que este método siempre está disponible. Siguiendo CamelCase, en Java los nombres de métodos se inician con minúscula y las restantes palabras que forman el nombre se inician con mayúscula.

Métodos: ¿procedimientos o funciones?

La palabra reservada void indica que, una vez completado, el método no deja o devuelve nada, los métodos que tienen esta definición se llaman procedimientos, como veremos enseguida. podemos producir una respuesta al completar la ejecución del programa o método, existen métodos (por ejemplo, el método que calcula la raíz cuadrada de un número) que están diseñados para producir valores para ser usados en el método que lo convocó.

Estos métodos que devuelven valores al finalizar son llamados funciones y se caracterizan porque en vez de void tienen la indicación del tipo de dato que devuelven. Los que no producen valores de respuestas y finalizan sin ninguna devolución directa son llamados procedimientos. Para definir sin ambigüedad qué método se debe a ejecutar, el nombre completo del método debe incluir el nombre de la clase que lo contiene. 

En la mayoría de los casos cuando usamos métodos comunes de paquetes provistos en el mismo lenguaje en la clase “Standard”, el nombre de la clase puede ser evitado, pero en otros casos (por ejemplo, Math. sin), Java considera un error omitir el nombre de la clase. Completa el nombre (o signatura) del método, entre paréntesis, la lista de uno o más parámetros.

Los parámetros describen los datos o recursos necesarios que deben estar disponibles antes de que el método se aplique.  Las declaraciones de parámetros son similares a las declaraciones de variables. Los parámetros múltiples son separados con comas. En el método main tenemos un parámetro: un arreglo (indicado por los corchetes [ ]) de cadenas (string). Este arreglo es simplemente una lista de cadenas que podría ser útil a nuestro método main.

El metodo main

Todos los métodos main deben ser declarados de esta manera. “Java identifica a los métodos por la signatura que está determinada por su nombre y sus parámetros. Dos métodos no pueden tener la misma signatura.  En particular en Java, no es posible declarar una función y un procedimiento con la misma signatura. Es importante observar que si dos métodos tienen el mismo nombre, pero diferentes parámetros, entonces, tienen signatura distinta y Java los compilará correctamente. Como un ejemplo de declaración de un método, consideremos la declaración del método cosque está dentro de la clase Math.

Su declaración es:

public static double cos(double theta)

Los diseñadores de la clase Math estaba interesados en que todos pudieran hacer uso de la función cos(coseno de un ángulo), por eso la declararon public. La función está disponible en cada momento, pues es declarada static. Para poder ser utilizada, la función necesita de un valor de entrada, simbolizado por theta, un número decimal (double) que representa un ángulo en radianes. La función devuelve doubleentre−1,0 y 1,0.  La función sin(seno) tiene una declaración similar, aunque, obviamente, su nombre es sin. El método lineTo es un procedimiento contenido en la clase DrawingWindow. A diferencia de otros métodos vistos, estáselo disponible cuando la DrawingWindow está funcionando. Su comportamiento, entonces, es dinámico.

Su declaración, en aquella clase, es:

public void lineTo(int x, int y)

Vale aclarar que estamos viendo declaraciones en sus clases de origen y que para ser usados, Java debe conocer la clase de origen que lo contiene, en algún caso con Math.’nombre’ y en otros casos con el prefijo de un objeto creado a partir de la clase correspondiente. La palabra void indica que lineTo no devuelve un valor. El efecto de invocar este método es que se dibuja una línea en la DrawingWindow.  El procedimiento o método que tiene la palabra void en su definición provee un mecanismo para encapsular, abstraer u ocultar los detalles de un proceso particular. Por ejemplo, podríamos querer escribir un procedimiento que simplemente espere por un segundo.

Podría escribirse como sigue:

public static void espereUnSegundo() 
{
	long ahora = System.currentTimeMillis(); 
	long despues = ahora + 1000; // un segundo son 1000 milisegundos 
	while (System.currentTlmeMillis() < despues) 
		{
		// nada! 
		}
}

Es claro que este procedimiento tiene un finalidad muy simple. Al usuario (el programador) no le interesa conocer los detalles de implementación y por lo tanto, preferirá usar este método. Estos detalles son, por ejemplo, que el tiempo en Java se mide en milisegundos o que necesitamos un ciclo para implementar el procedimiento.

Llamar, ejecutar o invocar un procedimiento

Para llamar, ejecutar o invocar este procedimiento, tipeamos el nombre seguido por una lista vacía de parámetros:

public static void main(String args[])
{
	espereUnSegund0(); 
}

La lista de parámetros es vacía, pues este proceso (esperar un segundo)no depende de ningún inputque el usuario o el programa le deba dar. ¿Cuál es el efecto de correr el procedimiento? La computadora aparenta detenerse por un segundo.  Teniendo en mente un procedimiento más versátil, podríamos preguntar:¿podemos detener la computadora un número arbitrario de segundos? Por supuesto que sí:

public static void espereNSegundos (int number) 
{
	int i; 
	for (i -O; i < number; i++) 
	}
		espereUnSegundo(); 
	}
}

Aquí decimos que number es un parámetro formal, es decir, que representará, dentro del método, el número de segundos que se va a esperar. Este número es claramente referenciado en las instrucciones que siguen: hacemos un ciclo number veces cuando llamamos wait1second.  La variable que controla ese ciclo, i, es una variable local . Mantiene un valor mientras el ciclo es activo. Observemos que si no conocemos el valor de number, no podemos correr el método. Es necesario, entonces, tener este número antes de que el método sea invocado.  Este número es llamado el parámetro real o argumento real. Nosotros especificamos el parámetro real cuando llamamos a un procedimiento.

espereNSegundos(60/5);

En este caso,la computadora detendrá la ejecución del programa por un quinto de minuto o 12 segundos. Cualquier expresión que resulte en un intes válida como parámetro real en este método.  Este proceso (pasar de un parámetro real a un parámetro formal)sirve para inicializar los valores de los parámetros formales del método antes de que el método comience a correr. Este proceso es llamado pasaje de parámetros.  Debemos aclarar que el método, en este caso, espera un inty que si el parámetro real es un double, esto causará problemas.

ACCESO A LOS ATRIBUTOS DE LA CLASE

Los atributos de una clase están estrechamente relacionados con su implementación. Conviene marcarlos como private e impedir su acceso desde fuera. Así en un futuro podremos cambiar la representación interna del objeto sin alterar el interface.

En la práctica resulta difícil de seguir:

class Complejo (

private double real, imaginario;

No vamos a permitir acceder la parte entera e imaginaria del objeto. Por lo tanto, resulta imposible consultar o modificar esta información.

Solución: métodos getters y setters.

MÉTODOS GETTERS Y SETTERS

Dan acceso a los atributos:

Ventajas: podemos cambiar la representación o interna, verificar que los valores son correctos o modificar otros aspectos del objeto

Una sobrecarga típica, la del método constructor

Un uso muy común de la sobrecarga es tener varios métodos constructores para una clase, al ser requerido que contemos con varias formas de inicializar objetos, y para ello, distintos métodos constructores que deben llamarse de la misma forma que la clase. Aquí entra en juego la sobrecarga, porque para tener distintos comportamientos en el mismo constructor, debemos implementar distintos métodos con nombre igual y lista de parámetros diferentes. Sobrecargar los constructores permite llevar a cabo una tarea, como inicializar objetos por caminos distintos. se muestra la situación de poder crear un objeto persona con un nombre determinado y conocido o crearlo con el segundo método constructor, sin nombre.

Si cargamos este codigo en BlueJ, en la clase persona, podremos hacer lo siguiente:Hacer doble clic en la clase y hacer clic en new Persona() para instanciar un nuevo objeto. hacer clic nuevamente en la clase y con botón derecho elige el otro constructor new Persona(String nombrePersona). Escribe un nombre como parámetro, por ejemplo “Alberto López”. A continuación, conel inspector de objetoscomprueba la situación de cada objeto.

Encapsulamiento:

El encapsulamiento surge de la necesidad de usar procedimientos o funciones (en formas de métodos) guardados en otras clases y es la expresión del reuso de programas. Permite llamar estos métodos, sin necesidad de conocer los detalles de cómo trabajan, lo que permite acelerar los tiempos de para ser usados como componentes del sistema actual.

Esto permite ahorrar mucho esfuerzo en la programación de sistemas grandes. Tiene la ventaja de que el usuario de un objeto no necesita saber cómo se almacenan los datos ni los detalles de implementación de los métodos. Estos detalles podrían cambiar mientras que la especificación de los métodos o firma seguirán siendo constantes.

La encapsulación provee un mecanismo o una capa de seguridad alrededor de los datos o atributos que se manipulan, protegiéndolos de accesos externos indeseados. La combinación o agrupamiento de atributos y métodos en una unidad de forma tal que la manipulación de los datos se produce solamente por medio de los métodos, se denomina Encapsulamiento.

Por medio del Encapsulamiento, los objetos cuentan con una capa de seguridad sobre los datos que manipulan, debido a que los demás objetos que quieran tener acceso sobre estos datos, solamente podrán hacerlo por medio de los métodos. Si un objeto tiene que modificar los datos de otro objeto, solamente lo podrá hacer llamando a alguno de sus métodos. 

La Encapsulación hace referencia a esta organización de un objeto en atributos y métodos de forma tal que los atributos son invisibles a los demás objetos y solamente se pueden acceder por medio de sus métodos.

Abstracción vs. Encapsulamiento:

Es necesario tener en cuenta lo siguiente:

  • el Encapsulamiento es frecuentemente confundido con la Abstracción, pero son conceptos distintos. Ambos conceptos están relacionados y se complementan pero representan ideas distintas
  •  El Encapsulamiento es el mecanismo por medio del cual se implementa la abstracción. Es el resultado de la abstracción.
  •  El Encapsulamiento oculta los datos del objeto y el usuario no tiene acceso a los mismos.
  •  Da como resultado una menor dependencia entre objetos.

Ventajas del encapsulamiento

  • Mejora la seguridad de un sistema ya que los detalles internos de la implementación de un objeto permanecen ocultos para el resto de los objetos.
  • La separación entre la interfaz de un objeto y su implementación permite un mejor entendimiento y organización del sistema.
  • Facilita el mantenimiento del sistema ya que podemos modificar la implementación de una clase sin alterar la interfaz de la misma.

Es el ocultamiento de la información. Según el Dictionary of OT, es “la localización física de las propiedades dentro de una sola abstracción de caja negra que oculta su implementación (y las decisiones asociadas de diseño) tras una interfaz pública”. La abstracción de “caja negra” se utiliza ampliamente en física, electrónica e informática; y consiste en esconder todos los detalles internos del sistema que se estudia bajo una caja negra imaginaria, cuando sea más importante comprender qué hace el sistema que cómo lo hace.

La encapsulación es como introducir el sistema dentro de una caja negra con dos ranuras llamadas “Entrada” y “Salida”. Por ejemplo, en metrología, cuando se quiere calibrar un dinamómetro, no se estudia la incertidumbre que proporciona cada circuito, cada muelle, cada parte móvil (entre otras cosas, porque el problema se tornaría casi inabordable) y luego se combinan para obtener la incertidumbre del aparato.

En la practica

En la práctica, lo que se hace es considerar el dinamómetro como una caja negra, el cual se calibra viendo las lecturas (“Salida”) que da frente a fuerzas patrón (“Entrada”), olvidando sus componentes internos.

Así, por poner otro ejemplo lejano al campo de la informática, un complejo circuito electrónico que forme parte de un sistema mayor puede sustituirse imaginariamente, para facilitar el estudio del sistema completo, por una caja negra que reciba una señal eléctrica y devuelva otra. Es más, el circuito podría caracterizarse por su función de transferencia (“lo que hace”) sin que fuera necesario conocer la forma en que modifica la señal de entrada (“cómo lo hace”) ni sus componentes.

Del mismo modo, cuando en Java se utiliza la clase Vector, no es necesario saber qué operaciones internas realiza para añadir o eliminar elementos; es más, si se necesitara conocerlas se incumpliría el principio de encapsulación.

En los lenguajes OO, la encapsulación garantiza que los usuarios de un objeto no puedan modificar el estado del objeto sin usar su interfaz (conjunto de métodos que son accesibles a otros objetos). Es decir, no pueden cambiar su estado de maneras no fijadas de antemano.

En un objeto bien diseñado, los otros objetos sólo pueden interaccionar con él mediante su  interfaz. Una buena encapsulación separa siempre las vistas que del objeto tienen el constructor y el usuario. La gran ventaja de la encapsulación consiste en que, si un módulo cambia internamente sin modificar su interfaz, el cambio no supondrá ninguna otra modificación del sistema. Por tanto, la encapsulación permite evitar que los programas sean tan interdependientes que un pequeño cambio provoque muchos efectos secundarios 

La encapsulación es una herramienta poderosa

La encapsulación es una herramienta poderosa en muchos campos Resulta llamativo que el término encapsulación provenga, precisamente, de la ingeniería electrónica. Esta coincidencia terminológica, al igual que el circuito electrónico de la figura 5, no es ni mucho menos casual. La ingeniería electrónica siempre ha trabajado, una vez pasada la época de los tubos de vacío, con módulos o componentes (“cápsulas”) en los que se integran otros muchos subcomponentes.

La idea tras los componentes siempre ha sido la reutilización. Resultaría inaceptable que se estropeara un componente electrónico y que hubiera que construir otro idéntico desde cero; o que los nuevos componentes tuvieran siempre que desarrollarse combinando constituyentes elementales –resistencias, condensadores y bobinas–, sin poder aprovechar nada de todos los componentes ya fabricados; o que fuera imprescindible conocer todos los elementos de un componente antes de poder saber para qué podría servir.

Antes de que la modularidad y la encapsulación tuvieran la importancia capital que tienen hoy en la ingeniería del software (hasta mediados de la década de 1960 no se empezó a hacer un uso intensivo del modularidad), en la programación sucedía lo que era inaceptable en la electrónica. Empezar un nuevo programa era, a menudo, comenzar desde cero y la reutilización de  “componentes de programación” era mínima.

En los pocos casos en que podían reutilizarse esos componentes, se necesitaba conocer cómo funcionaban “por dentro”, lo que tornaba imposible la encapsulación. Había, en fin, más “artesanía del software” que ingeniería del software.

INTERFACE E IMPLEMENTACIÓN

Cuando diseñamos un software hay dos aspectos que resultan fundamentales:

  • Interface: cómo este software puede ser utilizado.
  • Implementación: el código que hemos utilizado.

En Java:

  • Interface: se define como los elementos de una clase que son visibles desde fuera de esta.
  • Implementación: se define creando unos determinados atributos y escribiendo el código de los diferentes métodos.

LA ENCAPSULAMIENTO

El encapsulamiento consiste en ocultar los o atributos de un objeto de manera que sólo se puede cambiar mediante las operaciones definidas para ese objeto.

Dicho de otra forma, procurar que la interface o sea lo más independiente posible de la implementación.

En Java el encapsulamiento está estrechamente o relacionado con la visibilidad.

VISIBILIDAD

Para indicar la visibilidad de un elemento (tanto o atributos como métodos) podemos anteceder una de las siguientes palabras reservadas:

public: accesibles desde cualquier clase.

prívate: sólo son accesibles por la clase actual.

protected: sólo por la clase actual, sus descendientes y clases de nuestro paquete.

Polimorfismo

El Polimorfismo es una propiedad del Paradigma Orientado a Objetos que permite obtener distintas respuestas de diferentes objetos ante un mismo mensaje que les fue enviado.

Ventajas del Polimorfismo:

Reduce la dependencia entre objetos. El objeto emisor que envía el mensaje hacia otro objeto, no necesita saber a qué clase pertenece el objeto receptor, simplemente sabe que quien recibe el mensaje puede aceptar su mensaje.  Favorece a la extensibilidad del sistema.

Contexto

Los objetos en la programación orientada a objetos (POO), están compuestos por atributos y métodos. A cada uno de estos se puede acceder para su modificación(atributos)o para ejecutarlos (métodos) de acuerdo a lo permitido con los modificadores public, private y restricted, que figuran al comienzo de su declaración. A los modificadores private y restricted los podríamos pensar como una frontera entre el interior y el exterior de los objetos.

Esta separación, total (private) o parcial (restricted), aísla a un objeto de otros objetos y será imprescindible usar “mensajes” (usando los métodos “set…” y “set…”) para traspasar esta frontera.  Así se habla de que un objeto encapsula sus componentes (datos y métodos) y los oculta con los modificadores de acceso. Para que un objeto use un método de otro objeto, esta comunicación basada en mensajes debe poder llamar al método adecuado por las características del mensaje, ya que contiene la signatura o firma del método a ejecutar.

La signatura o firma de métodos

Es la combinación entre el nombre del método, cantidad, tipo de dato y orden de los parámetros, es decir que si tengo un método llamado correr (int a) y otro correr (String b), se llaman métodos polimórficos. 

Métodos polimórficos

La acción para escribir dos métodos con el mismo nombre pero diferente signatura se llama sobrecarga y permite mantener el mismo nombre de método. Con un cambio en el número, tipo y orden de los parámetros, podremos escribir la respuesta ajustada a las necesidades del problema. Hay que aclarar que en caso de funciones que tienen en su declaración el tipo de dato de retorno no se pueden sobrecargar dos funciones con la misma firma y diferentes tipos de dato de retorno. Esta situación se llama isomorfismo.

«Un objeto es polimórfico con otro cuando ambos responden a un mismo mensaje de formas distintas.  El mensaje en cuestión es polimórfico y permite que haya polimorfismo entre dos o más objetos”. En detalle, este fenómeno, sucede cuando uno de los métodos, al reconocerse en la firma del mensaje, responde ejecutándose.

La capacidad de seleccionaren la clase origen del objeto, entre los métodos de mismo nombre, pero con distinta firma, y responder adecuadamente se denomina despacho dinámico (dynamic dispatch). Tomemos el ejemplo de un método del objeto que es una función, llamada “entre «que esta devolverá o retornará el valor true (verdadero)si los argumentos están ordenados, es decir, si el segundo valor, “b” está entre “a” y “c”. 

“Estos métodos que realizan tests se llaman predicados” (Bailey, 2000, p.99). Aquí, consideraremos el método o predicado anterior para ver si un número se ubica entre otros dos, esto es: dados los números a, b y c debemos verificar si a ≤ b ≤ c.

La solución es muy sencilla:

public static boolean entre(double a, double b, double c) 
// devuelve true si a<= b <= c
{ 
		return (a <=b) && (b <= c); 
}

Considerando la cantidad de instrucciones que demandan un valor booleano, es claramente útil disponer de funciones que devuelvan este tipo de valores. Otra situación que necesitaría usar un predicado similar al anterior sería para la verificación de si un número es primo o perfecto.  Recordemos que las comparaciones (como <=) devuelven un valor booleano y, por lo tanto no tiene sentido (en Java) escribir la expresión a<= b<= c, puesto que después de la primera evaluación (a<= b), estaríamos comparando el resultado (es decir, un booleano) con un double(c).

Otras solución

Podríamos, también, haber escrito una función equivalente:

Sin embargo, es más conveniente, por razones de sencillez, escribir la función como se escribió por primera vez. Podemos también escribir

funciones que son útiles para manipular caracteres. Estas son usadas a menudo para convertir caracteres leídos desde el teclado. Las funciones que escribiremos usan el hecho de que los valores “a” a “z” y “A” a la “Z” aparecen uno a continuación del otro y en orden.

 Nuestra primera función testea si un carácter ingresado es una letra minúscula o no:

Nótese que el cálculo que se hace en la función es igual al que hace la función entre escrita más arriba. Escribamos ahora una función entre que trabaje en caracteres:

La función “entre” tiene diferentes implementaciones con diferente signatura porque la primera “entre” recibe parámetros de tipo char, mientras que la definición de “entre” (inmediatamente antes) acepta parámetros de tipo double. El programa decide cual de las dos funciones “entre” va ser ejecutada y lo decidirá en base al tipo de parámetros con los que se la llama. Esta sobrecarga del nombre es llamada polimorfismo. En esencia, hay una sola función abstracta que puede recibir como parámetros distintos tipos. Podemos usar la función “entre” para escribir es minúscula. También podemos escribir la función es Mayúscula de esta manera:

El uso más frecuente de la definición de sobrecarga de métodos es el que se le dá a los constructores, ya que por definición deben tener todos el mismo nombre que la clase.  Esto hace que si se quieren distintas opciones de crear objetos, se deberánescribir varios métodos con el mismo nombre y diferentes parámetros.El siguiente es un código de ejemplo de un método constructor simple, sin sobrecarga.

Constructor de la clase MaquinaDeBoleto

La siguiente versión de la clase tiene dos constructores con el mismo nombre (requisito indispensable para un constructor) y distinta lista de argumentos.  En este caso, es porque el método constructor original no daba información del saldo inicial que es mayor a cero y conocido al inicio de la operación en situaciones especiales.

El ejemplo anterior muestra que se aplica polimorfismo cuando se necesitan varios constructores para las distintas situaciones que debemos atender en la gestión de los objetos en una aplicación y el despacho dinámico lo permite. El polimorfismo está basado en la biología celular, donde las células poseen una frontera llamada pared celular la cual oculta y protege el interior de estas células, las que se comunican entre sí por medio de mensajes químicos. En la pared celular se encuentran los receptores que son proteínas que le permiten recibir los mensajes químicos ¡Despacho Dinámico en la naturaleza!

El Polimorfismo nos permite programar en general para así escribir programas que procesen objetos que comparten la misma superclase.  La interfaz nos brinda la posibilidad de conectar Objetos entre sí y establecer cómo interactúan esos elementos. Por ejemplo: los botones de una radio permiten sintonizar o cambiar el número de la frecuencia de una estación a otra.

Si una clase es definida como final, no puede ser una superclase e implícitamente sus métodos son definidos como «final».

Formas de declaración de métodos:

Hay dos formas de llamar a un método: usar el nombre solo, en el caso de querer llamar a otro método de la misma clase; usar una variable que contenga una referencia a un objeto, seguida de un punto y del nombre del método para llamar a un método del objeto al que hace referencia; y usar el nombre de la clase y un punto, para llamar a un método static de una clase. Una llamada a un método especifica su nombre y proporciona los argumentos que este método requiere para realizar su tarea. 

Cuando termina la llamada al método

Cuando termina la llamada al método, este devuelve un resultado o simplemente devuelve el control al método que lo llamó. Una clase puede contener métodos static para realizar tareas comunes que no requieren un objeto de la clase.  Cualquier información que pueda requerir un método static para realizar sus tareas se le puede enviar en forma de argumentos en una llamada al método. 

Llamar a un método static

Para llamar a un método static, se especifica el nombre de la clase en la cual está declarado el método, seguido de un punto y del nombre. Hay tres formas de devolver el control a una instrucción que llama a un método. Si el método no devuelve un resultado, el control regresa cuando el flujo del programa llega a la llave derecha de terminación del método, o cuando se ejecútala instrucción return:

si el método devuelve un resultado, la instrucción return expresión evalúa la expresión y después regresa de inmediato el valor resultante al método que hizo la llamada. Pueden declararse métodos con el mismo nombre en la misma clase, siempre y cuando tengan distintos conjuntos de parámetros (que se determina con base en el número, tipo y orden de los parámetros).

Sobrecarga de métodos

A esto se lo conoce como sobrecarga de métodos. La clase SobrecMetodos incluye dos versiones del método potencia2: una que calcula el cuadrado de un int(y devuelve un int) y otra que calcula el cuadrado de un double(y devuelve un double).

Aunque estos métodos tienen el mismo nombre, además de listas de parámetros y cuerpos similares, son simplemente dos métodos diferentes. Puede ser conveniente que consideremos potencia2 de enteros y potencia2 de dobles, respectivamente. Sobrecarga es la posibilidad de identificar con el mismo nombre a diferentes métodos, que realizan tareas levemente diferentes.

La línea 7 invoca al método potencia2 con el parámetro 6. Los valores enteros literales se tratan como de tipo int, por lo que la llamada al método en la línea 8 invoca a la versión de potencia2, definido en las líneas 10 a 13 que tiene un parámetro, x, que es entero. De manera similar, la línea 8 invoca al método potencia2 con el argumento 6.1. los valores de los literales de punto flotante double, por lo que la llamada al método en la línea 8 invoca al método potencia2 por tener al único parámetro del tiempo double. 

Finalizando

Cada método imprime en pantalla una línea texto, para mostrar que se llamó al método apropiado en cada caso. Los valores en las líneas XX y ZZ se muestran con el especificador de formato %f. No especificamos una precisión en ninguno de los dos métodos.  De manera predeterminada, los valores de punto flotante se muestran con seis dígitos de precisión. ¿Cómo se diferencian los métodos sobrecargados entre ellos? El compilador diferencia los métodos sobrecargados basados en su signatura o firma:

una combinación del nombre del método y del número, tipo y orden de sus parámetros. Si el compilador solo se fijara en los nombres de los métodos durante la compilación, el código de la figura sería ambiguo, el compilador no sabría cómo distinguir entre los dos métodos potencia2. De manera interna, el compilador utiliza nombres de métodos más largos que incluyen el nombre del método original, el tipo de cada parámetro y el orden de estos para determinar si los métodos en una clase son únicos dentro de ella.

No te detengas, sigue avanzando

Aquí tienes un propósito para este 2024 que debes considerar seriamente: si has querido mejorar tus habilidades en hacking, Ciberseguridad y programación ahora es definitivamente el momento de dar el siguiente paso. ¡Desarrolla tus habilidades aprovechando nuestros cursos a un precio increíble y avanza en tu carrera!

Python Practicando. Desde 0 hasta Desarrollador en Python

Aprende Python, donde iniciamos desde 0, sin conocimientos previos hasta desarrollar aplicaciones con mucha practica!

Calificación: 4,6 de 5 (20.833 calificaciones) 249.493 estudiantes Creado por Alvaro Chirou • 1.800.000+ Enrollments WorldwideWalter Coto || +450,000 Estudiantes Español.

Lo que aprenderás

  • Ejercitar la lógica de programación
  • Comprender cómo la vida cotidiana puede ser fácilitada o simulada con código
  • Aprender programación desde cero
  • Usar Visual Studio Code como Editor de Código
  • Conocer y aprender el lenguaje de programación Python
  • Ser un programador desde cero, sin conocimiento en otro lenguaje o con algo previo
  • Mejorar las habilidades de programación, mejorar procesos y fácilitar la comprensión de código
  • Preparar un entorno dónde programar en Python
  • Operaciones aritméticas y jerarquía de Python
  • Manejo de cadenas en Python
  • Digitar datos por teclado con Python
  • Mostrar Datos por Pantalla al usuario en Python
  • Operadores Relacionales de Python
  • Operadores Lógicos de Python
  • Condicionales en Python
  • Estructuras de Datos: Listas, Tuplas y Diccionarios
  • Iteraciones y bucles repetitivos de Python
  • Segmentar Código y hacerlo más eficaz con las Funciones en Python
  • Gestionar posibles errores que puedan dar tus programas
  • Programación Orientada a Objetos
  • HTML y CSS
  • Selenium Web Driver con Python
  • Ejercitar todo lo Aprendido con Ejercicios

Este curso incluye:

  • 25,5 horas de vídeo bajo demanda
  • 21 artículos
  • 148 recursos descargables
  • Acceso en dispositivos móviles y TV
  • Certificado de finalización

Python es Hoy uno de los lenguajes más utilizados por Excelencia.

Esto se debe por su simpleza al momento de Desarrollar aplicaciones.

Por su capacidad de procesamiento a altas velocidades con grandes volúmenes de información.

Es un increíble lenguaje con el cual si no sabes programar, podrás aprender.

Y si ya sabes desarrollar, te aconsejo aprenderlo ya que en el mercado cada vez se solicitan más desarrolladores en Python.

Aspirar al trabajo que desean, o mejorar sus ingresos con un aumento de salario.

Python se utiliza para muchisimas cosas como:

  • Machine Learning
  • Data Science
  • Inteligencia Artificial.
  • Y mucho más!

En este curso te acompañare en el proceso por el cual aprenderás las bases del lenguaje, para luego determinar qué camino quieres seguir.

Te invito que me acompañes a conocer este Gran Lenguaje!

Aprende con nuestros más de 100 cursos que tenemos disponibles para vos

¿Te gustaría enterarte de cuando lanzamos descuentos y nuevos cursos?

Sobre los autores

Álvaro Chirou

Yo soy Álvaro Chirou, tengo más de 20 Años de experiencia trabajando en Tecnología, eh dado disertaciones en eventos internacionales como OWASP, tengo más de 1.800.000 estudiantes en Udemy y 100 formaciones profesionales impartidas en la misma. Puedes serguirme en mis redes:

Laprovittera Carlos

Soy Laprovittera Carlos. Con más de 20 años de experiencia en IT brindo Educación y Consultoría en Seguridad de la Información para profesionales, bancos y empresas. Puedes saber más de mi y de mis servicios en mi sitio web: laprovittera.com y seguirme en mis redes:

¿Quieres iniciarte en hacking y ciberseguridad pero no sabes por dónde empezar? Inicia leyendo nuestra guia gratuita: https://achirou.com/como-iniciarse-en-ciberseguridad-y-hacking-en-2024/ que te lleva de 0 a 100. Desde los fundamentos más básicos, pasando por cursos, recursos y certificaciones hasta cómo obtener tu primer empleo.

SIGUE APRENDIENDO GRATIS CON NUESTRAS GUIAS

Cómo Iniciarse en Hacking y Ciberseguridad en 2024

Curso Gratis Linux – Capitulo 1 – Introducción a Linux

Curso Gratis de Redes – Capitulo 1 – Tipos de redes y servicios

Como iniciarse en TRY HACK ME – Complete Beginner #1

OSINT #1 Más de 200 Search Tools