<commit_before><commit_msg>Página creada con «Programar implica muchas veces manejar grandes cantidades de información, un programa es una entidad muy compleja y por lo tanto es muy difícil abarcarlo en su totalidad....»<commit_after>Programar implica muchas veces manejar grandes cantidades de información, un programa es una entidad muy compleja y por lo tanto es muy difícil abarcarlo en su totalidad. Por eso necesitamos herramientas que nos permitan manejar esa complejidad.

Gran parte de esas ideas trabajan con el principio de “dividir y conquistar”, esto es, tomar una parte más pequeña del programa y poder comprenderla olvidándonos momentáneamente del resto del programa. Sin embargo, siempre que uno tome una parte de un programa más grande, esa parte tendrá relaciones con otras partes del sistema. Para entenderlo yo debo poder incorporar esas otras partes a mi análisis pero sin tener que comprender todos sus detalles. Las herramientas que nos permiten eso las denominamos **abstracciones**.

Una abstracción es una forma de interpretar y conceptualizar lo que resulta más importante de una entidad compleja, sin tener que tener en cuenta todos sus detalles. Me permite quedarme con lo esencial descartando lo que (para mí, en ese momento) es accesorio.

Una abstracción es un concepto o una idea que no está asociado a ningún caso concreto. Abstraer es formar una idea general a partir de casos particulares. En la vida cotidiana usamos abstracciones todo el tiempo y gracias a eso, por ejemplo, podemos saber que una mesa es una mesa más allá de si es cuadrada o redonda, de madera o de plástico, con 4, 3 o 6 patas. Cuando programamos también es importante encontrar buenas abstracciones.

Cada uno de los paradigmas que vamos a aprender, nos va a brindar sus propias formas de abstracción. Las abstracciones de cada paradigma van a ser conceptos fundamentales en esta materia. Para los que vienen de programar estructurado, la forma de abstracción más conocida es el procedimiento. Un procedimiento permite tomar un conjunto de instrucciones y darles un nombre para poder utilizarla en otro contexto. Quien invoca el procedimiento se concentra en qué es lo que necesita resolver, el procedimiento es el que implementa el cómo se resuelve un determinado problema.

La [Declaratividad](declaratividad.html) es una forma de abstracción muy poderosa, que nos permite describir el conocimiento relativo a un problema desentendiéndonos de los algoritmos necesarios para manipular esa lógica, que son provistos por el motor.
{'fraction_non_alphanumeric': 0.02404414662987781, 'fraction_numerical': 0.0011824990145841545, 'mean_word_length': 5.028503562945368, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3685750', 'n_tokens_mistral': 728, 'n_tokens_neox': 714, 'n_words': 396}