<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Coders.me &#187; Ingeniería de Software</title>
	<atom:link href="http://www.coders.me/lang/es/category/ingenieria-de-software/feed" rel="self" type="application/rss+xml" />
	<link>http://www.coders.me/</link>
	<description>Blog de Informática y Programación</description>
	<lastBuildDate>Mon, 07 Dec 2009 18:48:23 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>Objetos DTO en C#</title>
		<link>http://www.coders.me//lang/es/c/objetos-dto-en-c</link>
		<comments>http://www.coders.me//lang/es/c/objetos-dto-en-c#comments</comments>
		<pubDate>Sat, 20 Dec 2008 03:00:54 +0000</pubDate>
		<dc:creator>Carlos</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[Ingeniería de Software]]></category>
		<category><![CDATA[diseño logico]]></category>

		<guid isPermaLink="false">http://www.coders.me/?p=368</guid>
		<description><![CDATA[<img src="http://www.coders.me/wp-content/uploads/2008/03/gnome-mime-text-x-csrc.thumbnail.gif" width="128" height="128" alt="" title="C++" /><br/><p>Los objetos de trasferencia de datos (DTO) pueden ser de mucha utilidad al momento de desarrollar software.  Basicamente son un molde  para la información, donde el esquema se encuentra fuertemente tipeado<br />
Algunas de las ventajas de utilizar diseños que implementen este…</p>]]></description>
			<content:encoded><![CDATA[<img src="http://www.coders.me/wp-content/uploads/2008/03/gnome-mime-text-x-csrc.thumbnail.gif" width="128" height="128" alt="" title="C++" /><br/><p>Los objetos de trasferencia de datos (DTO) pueden ser de mucha utilidad al momento de desarrollar software.  Basicamente son un molde  para la información, donde el esquema se encuentra fuertemente tipeado<br />
Algunas de las ventajas de utilizar diseños que implementen este tipo de objetos son:</p>
<ul>
<li>En cualquier punto del sistema  la información puede ser validada, a partir de metadatos establecidos</li>
<li>Mejora la comunicación entre los programadores, dandoles un mismo esquema de información, evitando conflictos</li>
<li>Separa fisicamente las capas del sistema, haciendo el codigo mucho mas limpio y reutilizable</li>
<li>Proporciona mayor seguridad</li>
</ul>
<p>Aunque estos objetos pueden darnos una gran cantidad de ventajas, tienen una enorme desventaja la cual es la causante de su poco uso, y es el tiempo de desarrollo, ya que obliga al programador a tipear cada una de las entidades logicas del sistema.<br />
Es por esta razón por la cual muchas de las compañias que utilizan este tipo de diseño, o que elaboración frameworks para lo mismo, utilizan herramientas de generación automatica de código.</p>
<p>En lo que respecta a .NET,  Microsoft deposito toda su confianza en los famosos objetos denominados Dataset, con los cuales se puede trabajar de una manera muy grafica y sencilla, es muy facil crear un esquma de información a partir de una base de datos de casi cualquier tipo (SQL, OLEDB, XML, etc.).<br />
Pero estos objetos Dataset tienen una desventaja tan grande como sus ventajas&#8230; no les importa el diseño del sistema, puedes continuar utilizando los asistentes del VS y ver como terminas juntando el acceso a datos, juntos con las reglas de negocio y la interfaz grafica, tienen tanta funcionalidad que resulta practicamente inutil tratar de heredarlos e incrementar funcionalidad.</p>
<p>Aunque es posible crear objetos DTO usando un Dataset, muchas veces resulta inapropiado, ya que se perdio la razón de ser de estos mismos que es: asegurarse que el transporte de la información se lleve acabo de manera practica y segura, y solo eso.Es por eso que me decidi a crear mi propia estructura para objetos DTO, la cual aunque muy simple tambien es muy concreta y eficaz.<br />
Aún no acabo de hacer todo lo que eh querido (una aplicación de auto-generación de código, y la funcionalidad de  serialización en XML), pero por lo pronto ya tiene la funcionalidad que deberia tener para poder trabajar con el.</p>
<p>Les muestro el diagrama de clases, y el código, si  alguien tiene alguna de idea de alguna modificación, escribanlo en los comentarios</p>
<p><span id="more-368"></span><br />
<a href="http://s545.photobucket.com/albums/hh372/mtzfba/?action=view&#038;current=DTO.png" target="_blank"><img src="http://i545.photobucket.com/albums/hh372/mtzfba/DTO.png" border="0" width="600px" height="390" alt="DTO Class Diagram"></a></p>
<pre class="brush: cpp;">
using System;
using System.Collections.Generic;

    /// &lt;summary&gt;
    /// Domain. Representa la gama de valores en que cierto objeto debe pertenecer
    /// &lt;/summary&gt;
    public struct Range&lt;type&gt; where type : struct
    {

        #region Campos
            private System.Nullable&lt;type&gt; minValue;
            private System.Nullable&lt;type&gt; maxValue;
            private bool applyMinValue;
            private bool applyMaxValue;
        #endregion

        #region Constructores

            internal Range(System.Nullable&lt;type&gt; minValue, System.Nullable&lt;type&gt; maxValue) {
                this.minValue = minValue;
                this.maxValue = maxValue;
                this.applyMinValue = true;
                this.applyMaxValue = true;
            }

            internal Range(System.Nullable&lt;type&gt; minValue, System.Nullable&lt;type&gt; maxValue, bool applyMinValue, bool applyMaxValue)
            {
                this.minValue = minValue;
                this.maxValue = maxValue;
                this.applyMinValue = applyMinValue;
                this.applyMaxValue = applyMaxValue;
            }            

        #endregion

        #region Propiedades
            public object MinValue {
                get { return minValue; }
            }
            public object MaxValue {
                get { return maxValue; }
            }
            public bool ApplyMinValue {
                get { return applyMinValue; }
            }
            public bool ApplyMaxValue {
                get { return applyMaxValue; }
            }
        #endregion

    }

    /// &lt;summary&gt;
    /// Metada. Representa un metadato (Información de un campo)
    /// &lt;/summary&gt;
    public class MetaData
    {

        #region Campos

            private Type netType; //Default. NETTypes.String
            private int length; //Default. 0
            private int maxLength; //Default. 0

            private bool isNullable; //Default. false
            private bool isReadOnly; //Default. false
            private bool isUnique; //Default. false

            private int numericPrecision; //Default. 0
            private int numericScale; //Default. 0

        #endregion

        #region Constructores

            /// &lt;summary&gt;
            /// MetaData. Constructor Generico
            /// &lt;/summary&gt;
            public MetaData() {
                this.netType = Type.GetType(&quot;System.String&quot;);
                this.length = 0;
                this.isNullable = false;
                this.isReadOnly = false;
                this.isUnique = false;
                this.numericPrecision = 0;
                this.numericScale = 0;
            }
            /// &lt;summary&gt;
            /// Metadata. Constructor por tipo
            /// &lt;/summary&gt;
            public MetaData(Type nettype) : this(){
                this.netType = nettype;
            }

        #endregion

        #region Propiedades

            public Type NetType {
                get {
                    return this.netType;
                }
                set {
                    this.netType = value;
                }
            }

            public int Length {
                get {
                    return this.length;
                }
                set {
                    this.length = value;
                }
            }

            public int MaxLength{
                get {
                    return this.maxLength;
                }
                set {
                    this.maxLength = value;
                }
            }

            public bool IsNullable {
                get {
                    return this.isNullable;
                }
                set{
                    this.isNullable = value;
                }
            }

            public bool IsReadOnly {
                get {
                    return this.isReadOnly;
                }
                set {
                    this.isReadOnly = value;
                }
            }

            public bool IsUnique {
                get {
                    return this.isUnique;
                }
                set {
                    this.isUnique = value;
                }
            }

            public int NumericPrecision {
                get {
                    return this.numericPrecision;
                }
                set {
                    this.numericPrecision = value;
                }
            }

            public int NumericScale {
                get {
                    return this.numericScale;
                }
                set {
                    this.numericScale = value;
                }
            }

        #endregion

    }

    /// &lt;summary&gt;
    /// FieldMeta. Clase abstracta basica de Field
    /// &lt;/summary&gt;
    public abstract class BaseField : MarshalByRefObject
    {

        #region Campos

            private MetaData meta;
            private string name;

        #endregion

        #region Constructores

            public BaseField(string name, MetaData meta) {;
                this.name = name;
                this.meta = meta;
            }

            public BaseField(string name, MetaData meta, bool isLocked){
                this.name = name;
                this.meta = meta;
            }            

        #endregion

        #region Propiedades

            internal MetaData Meta{
                get { return this.meta; }
                set { this.meta = value; }
            }

            public string Name{
                get { return name; }
                set { name = value; }
            }

        #endregion

        #region Delegados &amp; Eventos

            internal delegate void ValueChange(BaseField field, object value);
            internal event ValueChange valueChange;

            internal void OnValueChange(BaseField field, object value) {
                if (valueChange != null) {
                    valueChange(field, value);
                }
            }
        #endregion
    }

    /// &lt;summary&gt;
    /// Field. Representa un campo
    /// &lt;/summary&gt;
    public class Field&lt;type&gt; :  BaseField where type : struct
    {

        #region Campos
            private System.Nullable&lt;type&gt; value;
            private System.Nullable&lt;Range&lt;type&gt;&gt; range;
            private string regEx;
        #endregion

        #region Constructores

            public Field(string name, MetaData meta) : base(name, meta) { }
            public Field(string name, MetaData meta, bool isLocked) : base(name, meta, isLocked) { }

        #endregion

        #region Propiedades

            public type Value{
                get { return this.value.Value; }
                set {  this.value = value; }
            }

            public Range&lt;type&gt; Range {
                get { return this.range.Value; }
                set { this.range = value; }
            }

            public string RegEx {
                get { return this.regEx; }
                set { this.regEx = value; }
            }

            public bool HasValue {
                get { return value.HasValue; }
            }

            public bool HasRange{
                get { return range.HasValue; }
            }

            public bool HasRegEx {
                get { return !string.IsNullOrEmpty(this.regEx); }
            }

        #endregion

        #region Metodos

            #region General

                public override string ToString() {
                    if (value.HasValue){
                        return Value.ToString();
                    }
                    else{
                        return string.Empty;
                    }
                }                

            #endregion

            #region Dominio

                public void SetRange(type minValue, type maxValue)
                {
                    this.range = new Range&lt;type&gt;(minValue, maxValue);
                }

                public void SetRange(type minValue, type maxValue, bool applyMinValue, bool applyMaxValue)
                {
                    this.range = new Range&lt;type&gt;(minValue, maxValue, applyMinValue, applyMaxValue);
                }

            #endregion 

        #endregion

    }

    /// &lt;summary&gt;
    /// DTObject. Representaun objeto tipo DTO
    /// &lt;/summary&gt;
    public abstract class DTObject : MarshalByRefObject
    {

        #region Campos
            private Dictionary&lt;string, BaseField&gt; internalCollection;
        #endregion

        #region Propiedades
            public BaseField this[string name]{
                get { return this.internalCollection[name]; }
            }
        #endregion

        #region Constructores
            public DTObject() {
                this.internalCollection = new Dictionary&lt;string,BaseField&gt;();
                SetFields();
            }
        #endregion

        #region Metodos
            protected abstract void SetFields();
            protected void AddField(string name, BaseField field) {
                field.valueChange += new BaseField.ValueChange(OnValueChange);
                this.internalCollection.Add(name, field);
            }
        #endregion

        #region Delegados &amp; Eventos
            public delegate void ValueChange(BaseField field, object value);
            public event ValueChange fieldValueChange;

            protected void OnValueChange(BaseField field, object value){
                if (fieldValueChange != null){
                    fieldValueChange(field, value);
                }
            }
        #endregion
    }
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.coders.me//lang/es/c/objetos-dto-en-c/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Programación Genérica</title>
		<link>http://www.coders.me//lang/es/ingenieria-de-software/programacion-generica</link>
		<comments>http://www.coders.me//lang/es/ingenieria-de-software/programacion-generica#comments</comments>
		<pubDate>Sun, 02 Mar 2008 22:34:43 +0000</pubDate>
		<dc:creator>Eduardo</dc:creator>
				<category><![CDATA[Ingeniería de Software]]></category>
		<category><![CDATA[programacion]]></category>

		<guid isPermaLink="false">http://www.algoritmatica.com/ingenieria-de-software/programacion-generica</guid>
		<description><![CDATA[<img src="http://www.coders.me/wp-content/uploads/2008/09/ingenieria-48x48.jpg" width="48" height="48" alt="" title="Ingeniería de Software" /><br/><p>En este articulo, veremos que cosa es la &#8220;Programación Genérica&#8221; y lo mas importante: <strong>¿para qué nos sirve?</strong></p>
<h3>Definición</h3>
<p>Segun la wikipedia:</p>
<blockquote><p>La programación genérica es un tipo de programación que está mucho más centrada en los <strong>algoritmos</strong> que en los datos. La idea…</p></blockquote>]]></description>
			<content:encoded><![CDATA[<img src="http://www.coders.me/wp-content/uploads/2008/09/ingenieria-48x48.jpg" width="48" height="48" alt="" title="Ingeniería de Software" /><br/><p>En este articulo, veremos que cosa es la &#8220;Programación Genérica&#8221; y lo mas importante: <strong>¿para qué nos sirve?</strong></p>
<h3>Definición</h3>
<p>Segun la wikipedia:</p>
<blockquote><p>La programación genérica es un tipo de programación que está mucho más centrada en los <strong>algoritmos</strong> que en los datos. La idea de esta forma de programar pretende <strong>generalizar las funciones utilizadas para que puedan usarse en más de una ocasión.</strong></p>
<p>Esto se consigue parametrizando lo máximo posible el desarrollo del programa y expresados o devueltos de la forma más simple posible, evitando detalles concretos.</p></blockquote>
<p>Como el nombre de la palabra compuesta lo dice: Programación Genérica, signifíca una programación que no dependa de datos fijos, cuyo algoritmo funcione de manera &#8220;genérica&#8221; para todo tipo de ocaciones.<br />
<span id="more-121"></span><br />
<script type="text/javascript"><!--
google_ad_client = "pub-6896919298908258";
/* Post Abajo Patrocinado Por (Grande) */
google_ad_slot = "5751554033";
google_ad_width = 336;
google_ad_height = 280;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<p>Si hacemos una analogía: es como tener una máquina de hacer helados:<br />
Con la programación No-Genérica (la clásica) tendriamos una máquina por cada sabor.<br />
Con la programación Genérica, podriamos utilizar la misma máquina para crear diferentes sabores. Y las posibilidades son infinitas!</p>
<p>Para explicar esta idea, veamos unos ejemplos bien concretos:</p>
<pre class="brush: php;">function saludar_eduardo() {
  return &quot;Hola Eduardo&quot;;
}

function saludar_pedro() {
  return &quot;Hola Pedro!&quot;;
}

function despedir_eduardo() {
  return &quot;Chau Eduardo! que la pases bien.&quot;;
}
</pre>
<p>Aplicando el principio de la programación genérica, lograriamos algo asi:</p>
<pre class="brush: php;">function saludar(nombre, despedir) {
  if(despedir) {
    return &quot;Hola&quot;+nombre;
  }else{
    return &quot;Chau&quot;+nombre+&quot;! que la pases bien.&quot;;
  }
}
</pre>
<p>El ejemplo es bien concreto.</p>
<h3>¿Que ventajas ofrece este tipo de programación?</h3>
<ul>
<li>Reutilización del código</li>
<li>Mejorar el mantenimiento del código</li>
<li>Facilidad para encontrar errores y <em>debuguear</em></li>
<li>Concentrarse más en la lógica que en los datos</li>
</ul>
<h3>Otra ventaja?</h3>
<p>La reutilización del código tanto dentro del mismo proyecto, como para otros proyectos!<br />
Esto es extremadamente útil ya que, solo necesitarias programar un algoritmo una vez en tu vida, y lo reutilizarias (Sí, haciendo copy paste) en otros proyectos.</p>
<p>¿Que pasa si el algoritmo es muy grande y complejo&#8230; se puede hacer genérico?<br />
Divide y vencerás: La idea es dividir el algoritmo en partes más simples tantas veces como sea necesario, para volverlo fácil de comprender y de generalizar.</p>
<p>Como palabras finales, cabe destacar que los &#8220;Templates&#8221; en C++ siguen este principio de generalización, al permitirnos crear estructuras de datos que no dependen de tipos de datos específicos. Pero sobre este tema se hablará en otra ocación.</p>
<blockquote><p><strong>Y tu&#8230; ¿estas familiarizado con este tipo de programación?</strong></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.coders.me//lang/es/ingenieria-de-software/programacion-generica/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>¿Programar un Arte?</title>
		<link>http://www.coders.me//lang/es/ingenieria-de-software/programar-es-un-arte</link>
		<comments>http://www.coders.me//lang/es/ingenieria-de-software/programar-es-un-arte#comments</comments>
		<pubDate>Wed, 27 Feb 2008 13:41:02 +0000</pubDate>
		<dc:creator>Amir</dc:creator>
				<category><![CDATA[Ingeniería de Software]]></category>
		<category><![CDATA[programacion]]></category>

		<guid isPermaLink="false">http://www.algoritmatica.com/general/117</guid>
		<description><![CDATA[<img src="http://www.coders.me/wp-content/uploads/2008/09/ingenieria-48x48.jpg" width="48" height="48" alt="" title="Ingeniería de Software" /><br/><h3>¿Programar un arte?</h3>
<p>Últimamente he estado leyendo y encontrando una y otra vez esta discusión, ¿Programar es un arte?, Yo pienso que sí y es por el mero hecho de plasmar mis ideas y conocimiento en algo casi “tangible” como el…</p>]]></description>
			<content:encoded><![CDATA[<img src="http://www.coders.me/wp-content/uploads/2008/09/ingenieria-48x48.jpg" width="48" height="48" alt="" title="Ingeniería de Software" /><br/><h3>¿Programar un arte?</h3>
<p>Últimamente he estado leyendo y encontrando una y otra vez esta discusión, ¿Programar es un arte?, Yo pienso que sí y es por el mero hecho de plasmar mis ideas y conocimiento en algo casi “tangible” como el código escrito.</p>
<p>La mayoría de los “profesionistas” como siempre abogan por que<em> programar es más que teclear código </em>mientras que los fanáticos y apasionados (mayormente autodidactas) gritan desesperadamente <strong>“Programar es un arte!”.</strong></p>
<p>Por eso a continuación trataré de llegar a la conclusión de una vez por todas ya que si no mi cabeza seguirá procesando código y el bucle infinito no parará de ejecutarse.</p>
<p><span id="more-117"></span><br />
<script type="text/javascript"><!--
google_ad_client = "pub-6896919298908258";
/* Post Abajo Patrocinado Por (Grande) */
google_ad_slot = "5751554033";
google_ad_width = 336;
google_ad_height = 280;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<h3>¿Qué es el arte?</h3>
<p>Empecemos definiendo primero que nada qué es el arte, según la wikipedia:<em> “es una forma de expresar información<span>  </span>y dicha información puede transmitir ideas, sentimientos o emociones, limitarse a producir<span>  </span>o expresar excepciones y sensaciones que no sean explicables de otro modo&#8221;</em>.</p>
<p>Y llegados a este punto.</p>
<h3>¿Qué es programar?</h3>
<p>Es plasmar un algoritmo en un lenguaje de programación. (ojo que no sólo “picar teclas” como alguien dijo por ahí).</p>
<h3>¿Entonces es un arte o no?</h3>
<p>Dado que la ingeniería del software no era aplicada cuando los primeros programadores provenientes de las Ciencias Matemáticas y Fisica puedo decir que ellos eran como “Artesanos” lo mismo para los programadores de la Old School que desarrollaban en assembly, c y otros lenguajes<span>  </span>antiguos; para ellos el mero hecho de<strong> programar <span> </span>no era por “trabajo”</strong> era por una expresión de su conocimiento e ideas plasmadas en código, por el goce y el disfrute, por lo tanto <u><strong>Programar ERA un arte</strong></u>.</p>
<p>Con la llegada de la profesionalización de carreras de Informática y el desarrollo poco a poco de la Ingeniería de Software, la programación pasó de ser “Artesanal” a “Ingeniería”.</p>
<p>Actualmente se considera “técnicos” o “programadores” (pica código) a aquellos que programan sin definir detalles de un proyecto, sin planificación ni nada. El problema de esto es que muchos de estos “pica códigos” ya tienen definido y especificado su algoritmo sea en su cabeza o por papel.</p>
<p>Para finalizar y como analogía, diré que “Hacer hamburguesas de McDonalds ES UN ARTE” más que un proceso de producción bien definido.</p>
<p>Quién me diga que no y siga pensando que todo es Ciencia e Ingeniería entonces debería leerse la biografía de Ray kroc y darse cuenta de como habla del pan para hamburguesa y las papas fritas.</p>
<blockquote><p>
<strong>Y tú, ¿ sigues pensando que programar NO es un arte?  Te invito a expresar tu opinión.</strong></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.coders.me//lang/es/ingenieria-de-software/programar-es-un-arte/feed</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Paradigmas de programación que deberías tomar en cuenta a la hora de desarrollar.</title>
		<link>http://www.coders.me//lang/es/general/paradigmas-de-programacion-que-deberias-tomar-en-cuenta-a-la-hora-de-desarrollar</link>
		<comments>http://www.coders.me//lang/es/general/paradigmas-de-programacion-que-deberias-tomar-en-cuenta-a-la-hora-de-desarrollar#comments</comments>
		<pubDate>Mon, 18 Feb 2008 16:08:48 +0000</pubDate>
		<dc:creator>Amir</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Ingeniería de Software]]></category>
		<category><![CDATA[ingenieria del software]]></category>
		<category><![CDATA[programacion]]></category>

		<guid isPermaLink="false">http://www.algoritmatica.com/general/paradigmas-de-programacion-que-deberias-tomar-en-cuenta-a-la-hora-de-desarrollar</guid>
		<description><![CDATA[<img src="http://www.coders.me/wp-content/uploads/2008/09/general-48x48.jpg" width="48" height="48" alt="" title="General" /><br/><p>A la hora de resolver problemas es importante elegir el &#8220;paradigma&#8221; de programación correcto.Pero ¿qué es un paradigma de programación?
</p>
<p>Entiendase por ello en la forma en como el programador &#8220;ve&#8221; y piensa sobre la ejecución del programa.
</p>
<p>No sería…</p>]]></description>
			<content:encoded><![CDATA[<img src="http://www.coders.me/wp-content/uploads/2008/09/general-48x48.jpg" width="48" height="48" alt="" title="General" /><br/><p>A la hora de resolver problemas es importante elegir el &#8220;paradigma&#8221; de programación correcto.<br/>Pero ¿qué es un paradigma de programación?
</p>
<p>Entiendase por ello en la forma en como el programador &#8220;ve&#8221; y piensa sobre la ejecución del programa.
</p>
<p>No sería lo mismo entonces pensar en una ejecución secuencial a una ejecución de un algoritmo escrito en POO.<strong><br />
		</strong></p>
<p><strong>¿Qué paradigmas existen?<br />
</strong></p>
<p>Bueno antes que nada un poco de historia, remontémonos a  los tiempos de la Old school, las polillas en los enormes computadores  y antes de que Bill Gates fuera rico.
</p>
<p>En esos tiempos existía (y existe aún) la Programación Imperativa, &#8220;Assembly&#8221; y &#8220;El lenguaje binario&#8221; eran las únicas formas de programar…
</p>
<p>Mucho después empezaron a surgir los HLL (lenguajes de alto nivel) estructuras de control de flujo, variables, bifurcación y todo el resto que ya conocemos; fue entonces que la programación imperativa fue poco a poco evolucionando y de ahí derivó en la programación estructurada, procedural  y Orientado a Objetos.
</p>
<p><span id="more-82"></span></p>
<p>Por lo tanto tenemos:<br />
<!--adsense-->
</p>
<p><strong>Programación Imperativa.<br />
</strong></p>
<p>Describe  la programación en términos de estado del programa y un conjunto de instrucciones que cambian de estado por lo tanto este conjunto le indica a la computadora como realizar una tarea.
</p>
<p>Este paradigma podemos subdividirlo  en los siguientes:
</p>
<ol style="margin-left: 71pt">
<li>Programación procedural
</li>
<li>Programación estructurada
</li>
<li>
<div>Programación Orientada a objetos
</div>
<p>
 </p>
</li>
</ol>
<p><strong>Programación declarativa.<br />
</strong></p>
<p>Se declaran  un conjunto de condiciones, proposiciones, afirmaciones que describen el problema y detallan su solución.
</p>
<p>En la programación declarativa podemos incluír:
</p>
<ol>
<li>Programación funcional
</li>
<li>Programación Lógica.
</li>
</ol>
<p>
 </p>
<p>Por último y sin dejarlo atrás, se cuenta con la Programación Concurrente, pero este paradigma lo dejamos para otra ocasión.
</p>
<blockquote><p><strong>¿Y tú, en qué paradigma te gusta programar más?</strong></p></blockquote>
<p><strong>Referencias:<br />
</strong></p>
<p>http://es.wikipedia.org/wiki/Paradigma_de_programación</p>
]]></content:encoded>
			<wfw:commentRss>http://www.coders.me//lang/es/general/paradigmas-de-programacion-que-deberias-tomar-en-cuenta-a-la-hora-de-desarrollar/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

