<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7530382439329445269</id><updated>2011-11-27T21:02:26.431-03:00</updated><category term='null reference'/><category term='Algoritmos y Objetos'/><category term='Void-safety'/><category term='Eiffel'/><title type='text'>Algoritmos, Objetos y Estructuras de Datos</title><subtitle type='html'>Blog del libro Algoritmos, Objetos y Estructura de Datos. Una introducción a la programación con contratos.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://algoritmosyobjetos.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7530382439329445269/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://algoritmosyobjetos.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Gerardo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>13</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7530382439329445269.post-3127726976676898193</id><published>2011-07-26T11:15:00.001-03:00</published><updated>2011-09-28T13:34:44.245-03:00</updated><title type='text'>Contratos en C#. Parte 1.</title><content type='html'>En nuestro libro &lt;a href="http://www.lulu.com/content/libro-tapa-blanda/algoritmos-objetos-y-estructuras-de-datos/7671002"&gt;Algoritmos Objetos y Estructuras de Datos&lt;/a&gt;&amp;nbsp;los algoritmos y ejemplos están realizados en &lt;b&gt;C# &lt;/b&gt;y Eiffel. &lt;br /&gt;Eiffel tiene el soporte nativo para contratos de software, es el lenguaje pionero en ese sentido. Pero también es posible realizar contratos en C# y en cualquier lenguaje sobre .NET usando &amp;nbsp;&lt;b&gt;Microsoft Code Contracts&lt;/b&gt;.&lt;br /&gt;&lt;b&gt;Code Contracts &lt;/b&gt;provee un manera independiente del lenguaje de expresar precondiciones, poscondiciones e invariantes. &amp;nbsp;Hay algunas diferencias con los contratos en &lt;b&gt;Eiffel &lt;/b&gt;fundamentalmente en el tema de la herencia pero igualmente son una poderosa herramienta de construcción de software confiable. Además de la librería hay una serie de herramientas que permiten la verificación de contratos:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;ccrewrite&lt;/b&gt;: permite generar chequeos en tiempo de ejecución para los contratos&lt;/li&gt;&lt;li&gt;&lt;b&gt;cccheck &lt;/b&gt;un verificador estático de contratos en tiempo de compilación&lt;/li&gt;&lt;li&gt;&lt;b&gt;ccdoc &lt;/b&gt;que permite agregar los contratos a los archivos de documentación XML&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;En sucesivos artículos iremos describiendo mas en detalle esta herramienta de contratos de .NET. Para finalizar dejamos el código del ejemplo base de la librería, una clase que representa números racionales. Dicho ejemplo es fácil de leer y de comprender si se conoce el concepto de contratos, mas allá de los detalles de Microsoft Code Contracts.&lt;/div&gt;&lt;div&gt;&lt;div&gt;&amp;nbsp; public class Rational {&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; public int Numerator { get; protected set; }&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; public int Denominator { get; protected set; }&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; public Rational(int n, int d) {&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Contract.Requires(d != 0);&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; this.Numerator = n;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; this.Denominator = d;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; }&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; [ContractInvariantMethod]&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; private void RationalInvariant() {&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Contract.Invariant(Denominator != 0);&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; }&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; public virtual void Add(Rational other) {&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Contract.Requires(other != null);&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; int newN = this.Numerator * other.Denominator + other.Numerator * this.Denominator;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; int newD = this.Denominator * other.Denominator;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; this.Numerator = newN;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; this.Denominator = newD;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; }&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; public static Rational operator +(Rational a, Rational b) {&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Contract.Requires(a != null);&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Contract.Requires(b != null);&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return new Rational(a.Numerator * b.Denominator + b.Numerator * a.Denominator, a.Denominator * b.Denominator);&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; }&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; public static Rational operator +(Rational a, int b) {&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Contract.Requires(a != null);&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return new Rational(a.Numerator + b * a.Denominator, a.Denominator);&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; }&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; public virtual void Divide(int divisor)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; {&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Contract.Requires&lt;argumentoutofrangeexception&gt;(divisor != 0);&lt;/argumentoutofrangeexception&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; this.Denominator = this.Denominator * divisor;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; }&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; public int Truncate()&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; {&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return this.Numerator / this.Denominator;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; }&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; public virtual void Invert() {&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Contract.Ensures(Contract.OldValue(this.Numerator) == this.Denominator &amp;amp;&amp;amp; &amp;nbsp; &amp;nbsp;Contract.OldValue(this.Denominator) == this.Numerator);&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; int num = this.Numerator;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; int den = this.Denominator;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; this.Numerator = den;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; this.Denominator = num;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; }&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; }&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7530382439329445269-3127726976676898193?l=algoritmosyobjetos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://algoritmosyobjetos.blogspot.com/feeds/3127726976676898193/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://algoritmosyobjetos.blogspot.com/2011/07/contratos-en-c-parte-1.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7530382439329445269/posts/default/3127726976676898193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7530382439329445269/posts/default/3127726976676898193'/><link rel='alternate' type='text/html' href='http://algoritmosyobjetos.blogspot.com/2011/07/contratos-en-c-parte-1.html' title='Contratos en C#. Parte 1.'/><author><name>Gerardo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7530382439329445269.post-2825228412462422307</id><published>2010-12-27T13:20:00.001-03:00</published><updated>2010-12-27T13:23:28.119-03:00</updated><title type='text'>Ofuscando .NET</title><content type='html'>La ofuscación de código tiene cómo objetivo&amp;nbsp;proteger&amp;nbsp;la propiedad intelectual del software. Se trata de un proceso por el cual se hace incompresible (o casi) a &amp;nbsp;los humanos comprender el código.&lt;br /&gt;Dado que es muy fácil&amp;nbsp;transformar&amp;nbsp;el MSIL (el código intermedio que se general al compilar en los lenguajes de .NET y que es luego interpretado por el CLR) en por ejemplo C#, muchos programadores ven la necesidad de proteger su código mediante la ofuscación.&lt;br /&gt;Hay diversas herramientas disponibles en el mercado a diversos precios, afortunadamente existe una herramienta muy potente, que se integra perfectamente con VisualStudio y que es gratuita. Se trata de Eazfuscator.Net.&lt;br /&gt;Una intefaz sencilla y amigable sumado a la posibilidad de lo que se denomina ofuscación declarativa mediante atributos (Declarative Obfuscation Using Custom Attributes).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.foss.kharkov.ua/g1/projects/eazfuscator/dotnet/Images/Assistant%20DND.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="184" src="http://www.foss.kharkov.ua/g1/projects/eazfuscator/dotnet/Images/Assistant%20DND.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;La figura anterior muestra la forma de ofuscar un proyecto mediante un simple drag and drop.&lt;br /&gt;Para descargarlos, probarlo y ver mas pueden ir a:&amp;nbsp;&lt;a href="http://www.foss.kharkov.ua/g1/projects/eazfuscator/dotnet/Default.aspx"&gt;http://www.foss.kharkov.ua/g1/projects/eazfuscator/dotnet/Default.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7530382439329445269-2825228412462422307?l=algoritmosyobjetos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://algoritmosyobjetos.blogspot.com/feeds/2825228412462422307/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://algoritmosyobjetos.blogspot.com/2010/12/ofuscando-net.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7530382439329445269/posts/default/2825228412462422307'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7530382439329445269/posts/default/2825228412462422307'/><link rel='alternate' type='text/html' href='http://algoritmosyobjetos.blogspot.com/2010/12/ofuscando-net.html' title='Ofuscando .NET'/><author><name>Gerardo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7530382439329445269.post-8993996394973472099</id><published>2010-10-13T10:35:00.001-03:00</published><updated>2010-10-13T10:35:08.890-03:00</updated><title type='text'>Parámetros Opcionales en C# 4</title><content type='html'>&lt;p&gt;La nueva versión del lenguaje C# agrega la posibilidad de establecer métodos con parámetros nombrados opcionales. De esta forma puede evitarse tener que definir métodos sobrecargados que en realidad hacen los mismo.&lt;/p&gt;  &lt;p&gt;Por ejemplo, para definir un método que recibe un string y un entero podemos tener el siguiente código:&lt;/p&gt;  &lt;p&gt;public void recibedos(string cadena, int entero){&lt;/p&gt;  &lt;p&gt;…..cuerpo del método&lt;/p&gt;  &lt;p&gt;}&lt;/p&gt;  &lt;p&gt;Ahora supongamos que queremos que el entero sea optativo. Para ello basta con asignarle un valor por defecto:&lt;/p&gt;  &lt;p&gt;public void recibedos(string cadena, int entero=0){&lt;/p&gt;  &lt;p&gt;…..cuerpo del método&lt;/p&gt;  &lt;p&gt;}&lt;/p&gt;  &lt;p&gt;De esta manera podemos invocar&lt;/p&gt;  &lt;p&gt;recibedos(“una cadena”);&lt;/p&gt;  &lt;p&gt;o&lt;/p&gt;  &lt;p&gt;recibedos(“una cadena”, 7);&lt;/p&gt;  &lt;p&gt;En el primer caso el parámetro entero toma el valor 0 indicado en su declaración (puede indicarse cualquier valor). En el segundo el parámetro recibe el valor 7.&lt;/p&gt;  &lt;p&gt;C# 4 soporta también argumentos nombrados. Algo muy útil cuando se tiene por ejemplo un método como el siguiente:&lt;/p&gt;  &lt;p&gt;public void haceralgo(int x=0, int y=1){&lt;/p&gt;  &lt;p&gt;….cuerpo del método&lt;/p&gt;  &lt;p&gt;}&lt;/p&gt;  &lt;p&gt;En este caso tenemos dos parámetros opcionales la x y la y.&amp;#160; Es posible que quiera invocarse el método con sólo un valor para la x, con sólo un valor para y o con ambos o sin ninguno.&lt;/p&gt;  &lt;p&gt;haceralgo(x:2);   &lt;br /&gt;haceralgo(y:3);    &lt;br /&gt;haceralgo(y:2,x:3);    &lt;br /&gt;haceralgo();&lt;/p&gt;  &lt;p&gt;Todas las invocaciones anteriores son válidas, en el primer caso se usa el valor por defecto de y, en el segundo el valor por defecto de x, en el tercero se invirtió el orden (algo no recomendable pero posible) la y recibe 2 y la x 3. En el cuarto caso no se pasan parámetros y la rutina ejecuta con x e y usando sus valores por defecto.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7530382439329445269-8993996394973472099?l=algoritmosyobjetos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://algoritmosyobjetos.blogspot.com/feeds/8993996394973472099/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://algoritmosyobjetos.blogspot.com/2010/10/parametros-opcionales-en-c-4.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7530382439329445269/posts/default/8993996394973472099'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7530382439329445269/posts/default/8993996394973472099'/><link rel='alternate' type='text/html' href='http://algoritmosyobjetos.blogspot.com/2010/10/parametros-opcionales-en-c-4.html' title='Parámetros Opcionales en C# 4'/><author><name>Gerardo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7530382439329445269.post-4307425704379830980</id><published>2010-06-16T11:26:00.001-03:00</published><updated>2010-06-16T11:27:03.495-03:00</updated><title type='text'>Eiffel: forma iterativa cómo expresión lógica</title><content type='html'>&lt;p&gt;En el artículo anterior vimos la nueva sintaxis para los ciclos llamada &lt;em&gt;forma de iteración&lt;/em&gt;. Esta forma más compacta de expresar el ciclo (&lt;strong&gt;loop&lt;/strong&gt;) tiene la ventaja de no evitar efectos laterales mediante la utilización implícita de un cursor nuevo.&amp;#160; Está característica hace a esta forma ideal para usarla como expresión lógica y por ende incorporarla a los contratos.&lt;/p&gt;  &lt;p&gt;La forma de lograr expresiones lógicas a partir del ciclo es usando alguna de las dos notaciones alternativas para el cuerpo del ciclo en lugar de la palabra &lt;em&gt;loop: &lt;/em&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;em&gt;&lt;strong&gt;some&lt;/strong&gt; expresión_lógica&lt;/em&gt;&lt;/li&gt;    &lt;li&gt;&lt;em&gt;&lt;strong&gt;all&lt;/strong&gt; expresión_logica&lt;/em&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Por ejemplo:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;across&lt;/strong&gt; mi_lista &lt;strong&gt;as&lt;/strong&gt;&amp;#160; ic&amp;#160;&amp;#160; &lt;strong&gt;all&lt;/strong&gt;&amp;#160; ic.item.count &amp;gt; 3 end&lt;/p&gt;  &lt;p&gt;En este caso tenemos un ciclo que recorre la lista y consulta cada elemento para ver si la propiedad count es mayor a 3. En caso de cumplirse para toda la lista el ciclo cómo expresión lógica es verdadero. En el caso de usar &lt;strong&gt;&lt;em&gt;some&lt;/em&gt;&lt;/strong&gt; en lugar de &lt;strong&gt;&lt;em&gt;all&lt;/em&gt;&lt;/strong&gt; el ciclo será verdadero si al menos un elemento cumple la condición.&lt;/p&gt;  &lt;p&gt;La utilización de &lt;em&gt;&lt;strong&gt;all&lt;/strong&gt;&lt;/em&gt; o &lt;em&gt;&lt;strong&gt;some&lt;/strong&gt;&lt;/em&gt; como cuerpo del ciclo sólo es permitido si no hay parte de inicialización en el mismo (&lt;em&gt;&lt;strong&gt;from&lt;/strong&gt;&lt;/em&gt;).&lt;/p&gt;  &lt;p&gt;Evidentemente esta nueva facilidad sintáctica soportada por contratos (por ejemplo no es posible modificar una estructura recorrida por la forma iterativa &lt;em&gt;across&lt;/em&gt;, para ello debe usarse la forma tradicional &lt;em&gt;loop&lt;/em&gt;) brinda muchas facilidades a los desarrolladores Eiffel.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7530382439329445269-4307425704379830980?l=algoritmosyobjetos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://algoritmosyobjetos.blogspot.com/feeds/4307425704379830980/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://algoritmosyobjetos.blogspot.com/2010/06/eiffel-forma-iterativa-como-expresion.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7530382439329445269/posts/default/4307425704379830980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7530382439329445269/posts/default/4307425704379830980'/><link rel='alternate' type='text/html' href='http://algoritmosyobjetos.blogspot.com/2010/06/eiffel-forma-iterativa-como-expresion.html' title='Eiffel: forma iterativa cómo expresión lógica'/><author><name>Gerardo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7530382439329445269.post-7539838881824665906</id><published>2010-06-01T12:02:00.004-03:00</published><updated>2010-06-01T12:22:46.761-03:00</updated><title type='text'>Nueva construcción para ciclos en Eiffel: across</title><content type='html'>En el libro Algoritmos, Objetos y Estructuras de Datos se explica detalladamente la estructura de ciclo en Eiffel. Posteriormente a la publicación del libro el lenguaje se vio ampliado con la introducción de una variante que permite un modo de programación seguro,&amp;nbsp; mas conciso, mas abstracto sin perder las cualidades del calidad de la sentencia loop (invariante y variante de ciclo).&lt;br /&gt;Describiremos entonces lo que llamamos &lt;em&gt;forma de itereación (across), &lt;/em&gt;el cual nos permite especificar iteraciones en forma mas compacta. La única condición es que la iteración se debe realizar sobre una estructura que herede de la clase ITERABLE. Todas las estructuras significantes de EiffelBase se han modificado para heredar de ITERABLE.&lt;br /&gt;Para ir al grano vemos como sería la iteración sobre una lista:&lt;br /&gt;&lt;br /&gt;Este mismo ejemplo usando la forma tradicional se escribe:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;across &lt;/b&gt;mi_lista &lt;b&gt;as &lt;/b&gt;lc &lt;b&gt;loop &lt;/b&gt;print (lc.item) &lt;b&gt;end&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;from &lt;/b&gt;my_list.start &lt;b&gt;until &lt;/b&gt;my_list.off loop print (my_list.item) my_list.forth &lt;b&gt;end&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Analicemos las partes en que se divide la forma de iteración. Comienza con la "&lt;em&gt;parte de iteración&lt;/em&gt;”:&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;across&lt;/strong&gt; mi_lista &lt;strong&gt;as&lt;/strong&gt; lc&lt;br /&gt;&lt;br /&gt;Esta parte establece cual es la estructura sobre la que va a iterar (mi_lista) y además el cursor a usar (lc). La forma de iteración utiliza un cursor externo creado especialmente para la iteración y cuyo alcance&amp;nbsp; es sólo en la iteración.&lt;br /&gt;Luego de la parte de iteración tenemos la parte del cuerpo de la iteración:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;loop&lt;/strong&gt; print (lc.item)&lt;br /&gt;&lt;br /&gt;Esta parte utiliza el cursor para acceder al elemento apuntado en cada momento de la iteración. Nótese que no hay referencia a mover el cursor para adelante ni a controlar el fin de la lista (mi_lista.off). cómo en el caso tradicional . Todo esto es abstraído por la construcción y evita de esta manera errores de programación al respecto. &lt;br /&gt;Una diferencia muy importante es que la forma de iteración utiliza un cursor externo mientras la forma tradicional (cómo la hemos escrito) usa un cursor interno. La generación automática de un cursor externo es ventajosa porque permite que la iteración no cambie el estado de la lista. Eso nos permite tener activos varios recorridos al mismo tiempo sin&amp;nbsp; afectarse entre si.&lt;br /&gt;Si el cursor se crea automáticamente ¿cómo atravesamos la lista al revés?, es decir de atrás para adelante.. Una característica importante de la clase ITERABLE es la rutina new_cursor la cual devuelve un cursor nuevo recién creado asociado a la estructura. Este cursor es de tipo &lt;em&gt;ITERATION_CURSOR&lt;/em&gt; que a su vez hereda de ITERABLE por lo cual podríamos escribir:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;across &lt;/span&gt;&lt;/strong&gt;&lt;em&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;mi_lista.new_cursor.reversed&lt;/span&gt;&lt;/em&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; &lt;/span&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;as&lt;/span&gt;&lt;/strong&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; &lt;/span&gt;&lt;em&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;c&lt;/span&gt;&lt;/em&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; &lt;/span&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;loop &lt;/span&gt;&lt;/strong&gt;&lt;em&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;print &lt;/span&gt;&lt;/em&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;(c.&lt;/span&gt;&lt;em&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;item&lt;/span&gt;&lt;/em&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;) &lt;/span&gt;&lt;strong&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;end&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;En el próximo artículo veremos el uso de la forma iterativa como expresión lógica.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7530382439329445269-7539838881824665906?l=algoritmosyobjetos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://algoritmosyobjetos.blogspot.com/feeds/7539838881824665906/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://algoritmosyobjetos.blogspot.com/2010/06/nueva-construccion-para-ciclos-en.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7530382439329445269/posts/default/7539838881824665906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7530382439329445269/posts/default/7539838881824665906'/><link rel='alternate' type='text/html' href='http://algoritmosyobjetos.blogspot.com/2010/06/nueva-construccion-para-ciclos-en.html' title='Nueva construcción para ciclos en Eiffel: across'/><author><name>Gerardo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7530382439329445269.post-5215386973267722601</id><published>2010-05-13T18:18:00.001-03:00</published><updated>2010-05-14T15:32:41.670-03:00</updated><title type='text'>Ciclos y Gráficos usando Matlab</title><content type='html'>&lt;p&gt;En este artículo saldremos un poco de la estructura del blog para referirnos a una herramienta muy utilizada para el procesamiento de imágenes y el cálculo y manipulación de datos matriciales.&amp;#160; Lo interesante es que permite comunicarse con otros lenguajes (como C#, Java, etc) a través de funciones de librería específicas que facilitan el trabajo&lt;/p&gt;  &lt;p&gt;El tipo de datos fundamental en Matlab (y en Octave) es la matriz y existen muchísimas funciones que manipulan este tipo de dato. Pero hoy nos vamos a ocupar de algo menos común y más algorítmico: como realizar ciclos en Matlab/Octave y como aprovecharlos para realizar gráficos de diferentes funciones.&lt;/p&gt;  &lt;p align="left"&gt;&lt;strong&gt;&lt;em&gt;&lt;u&gt;Algunos conceptos previos:&lt;/u&gt;&lt;/em&gt;       &lt;br /&gt;&lt;/strong&gt;&lt;u&gt;&lt;em&gt;Operador ‘:’&lt;/em&gt;       &lt;br /&gt;&lt;/u&gt;Se trata de una de las formas de definir vectores y matrices más usada y más fácil de utilizar, dada la rápida visualización de la salida sin necesidad de ver el resultado:     &lt;br /&gt;&lt;font face="Arial" size="2"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p align="left"&gt;&lt;font face="Arial" size="2"&gt;octave&amp;gt; x=1:1:10;        &lt;br /&gt;octave&amp;gt; x&lt;/font&gt;       &lt;br /&gt;x =       &lt;br /&gt;1 2 3 4 5 6 7 8 9 10       &lt;br /&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p align="left"&gt;De alguna manera, el : representa un rango, en este caso desde 1 hasta 10 y en el centro se coloca el paso (o sea con que incremento se llega desde 1 hasta 10). Por defecto el paso es 1 pero puede ser cualquier número entero o real, positivo o negativo:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p align="left"&gt;     &lt;br /&gt;octave&amp;gt; x=10:-1:1       &lt;br /&gt;x =       &lt;br /&gt;10 9 8 7 6 5 4 3 2 1&lt;/p&gt; &lt;/blockquote&gt;  &lt;p align="left"&gt;   &lt;br /&gt;&lt;em&gt;&lt;u&gt;&lt;strong&gt;Gráficos&lt;/strong&gt;&lt;/u&gt;&lt;/em&gt;     &lt;br /&gt;&lt;strong&gt;plot()&lt;/strong&gt; crea un gráfico a partir de vectores y/o columnas de matrices, con escalas lineales sobre ambos ejes.     &lt;br /&gt;Por ejemplo, vamos a hacer un gráfico de la función 0.1 * |x| * sin(x)     &lt;br /&gt;Graficaremos usando valores para x entre -2pi y 2pi&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Generamos el vector x entre -2p y 2pi &lt;/li&gt; &lt;/ul&gt;  &lt;blockquote&gt;   &lt;p&gt;octave&amp;gt; x = -2*pi:0.1:2*pi;&lt;/p&gt; &lt;/blockquote&gt;  &lt;ul&gt;   &lt;li&gt;Dibujamos: &lt;/li&gt; &lt;/ul&gt;  &lt;blockquote&gt;   &lt;p&gt;octave&amp;gt; plot(x, abs(0.1*x) .* sin(x));&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;   &lt;br /&gt;.* Recordar que * es el producto de matrices. No funcionará con vectores, mientras que .* es el producto miembro a miembro de los elementos de cada vector     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_iR0RF69pYa8/S-2XQ--HdSI/AAAAAAAAABY/hyDfQIkPTsM/s1600-h/fig1%5B1%5D.jpg"&gt;&lt;img title="fig1" style="border-right: 0px; border-top: 0px; display: block; float: none; margin-left: auto; border-left: 0px; margin-right: auto; border-bottom: 0px" height="201" alt="fig1" src="http://lh5.ggpht.com/_iR0RF69pYa8/S-xssNFAXgI/AAAAAAAAABc/00mKPtESrc0/fig1_thumb.jpg?imgmax=800" width="325" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Generalicemos nuestra función: a * |x| * sin(x) y graficamos dando 3 diferentes valores a la variable a. Por ejemplo:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;     &lt;br /&gt;octave&amp;gt; plot(x, abs(0.1*x) .* sin(x));       &lt;br /&gt;octave&amp;gt; plot(x, abs(0.2*x) .* sin(x));       &lt;br /&gt;octave&amp;gt; plot(x, abs(0.3*x) .* sin(x));       &lt;br /&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;¿Cómo hacemos si queremos ver los tres gráficos en una misma pantalla?&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;     &lt;br /&gt;octave&amp;gt; hold on;       &lt;br /&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;hold es una función que permite agregar gráficos a una figura ya existente, respetando su contenido&lt;/p&gt;  &lt;p&gt;&lt;u&gt;&lt;em&gt;Otras funciones útiles:&lt;/em&gt;&lt;/u&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;grid&lt;/strong&gt;: Muestra una cuadrícula en la pantalla del gráfico. Usando grid&amp;#160; on se activa y con off se desactiva &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;title(‘titulo’)&lt;/strong&gt;: Coloca un título al gráfico &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;xlabel(‘leyeda x’)&lt;/strong&gt;: Coloca una leyenda al eje x &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;ylabel(‘leyeda y’)&lt;/strong&gt;: Coloca una leyenda al eje y &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;   &lt;br /&gt;Por defecto, el color de las líneas del gráfico es rojo, pero eso se puede cambiar, así como también el estilo de las líneas. En las siguientes tablas se muestran las posibilidades de colores y estilos de líneas:&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="0" border="1"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="116"&gt;         &lt;p&gt;&lt;em&gt;&lt;b&gt;Símbolo&lt;/b&gt;&lt;/em&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="175"&gt;         &lt;p&gt;&lt;em&gt;&lt;b&gt;Color&lt;/b&gt;&lt;/em&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="116"&gt;         &lt;p&gt;&lt;em&gt;y&lt;/em&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="175"&gt;         &lt;p&gt;&lt;em&gt;Amarillo&lt;/em&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="116"&gt;         &lt;p&gt;&lt;em&gt;m&lt;/em&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="175"&gt;         &lt;p&gt;&lt;em&gt;Magenta&lt;/em&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="116"&gt;         &lt;p&gt;&lt;em&gt;c&lt;/em&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="175"&gt;         &lt;p&gt;&lt;em&gt;Celeste&lt;/em&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="116"&gt;         &lt;p&gt;&lt;em&gt;r&lt;/em&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="175"&gt;         &lt;p&gt;&lt;em&gt;Rojo&lt;/em&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="116"&gt;         &lt;p&gt;&lt;em&gt;g&lt;/em&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="175"&gt;         &lt;p&gt;&lt;em&gt;Verde&lt;/em&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="116"&gt;         &lt;p&gt;&lt;em&gt;b&lt;/em&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="175"&gt;         &lt;p&gt;&lt;em&gt;Azul&lt;/em&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="116"&gt;         &lt;p&gt;&lt;em&gt;w&lt;/em&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="175"&gt;         &lt;p&gt;&lt;em&gt;Blanco&lt;/em&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="116"&gt;         &lt;p&gt;&lt;em&gt;k&lt;/em&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="175"&gt;         &lt;p&gt;&lt;em&gt;Negro (por defecto)&lt;/em&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;table cellspacing="0" cellpadding="0" border="1"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="116"&gt;         &lt;p&gt;&lt;em&gt;&lt;b&gt;Símbolo&lt;/b&gt;&lt;/em&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="175"&gt;         &lt;p&gt;&lt;em&gt;&lt;b&gt;Tipo de línea&lt;/b&gt;&lt;/em&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="116"&gt;         &lt;p&gt;&lt;em&gt;.&lt;/em&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="175"&gt;         &lt;p&gt;&lt;em&gt;Puntos&lt;/em&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="116"&gt;         &lt;p&gt;&lt;em&gt;o&lt;/em&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="175"&gt;         &lt;p&gt;&lt;em&gt;Con círculos&lt;/em&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="116"&gt;         &lt;p&gt;&lt;em&gt;x&lt;/em&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="175"&gt;         &lt;p&gt;&lt;em&gt;Marcas en x&lt;/em&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="116"&gt;         &lt;p&gt;&lt;em&gt;+&lt;/em&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="175"&gt;         &lt;p&gt;&lt;em&gt;Marcas en +&lt;/em&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="116"&gt;         &lt;p&gt;&lt;em&gt;*&lt;/em&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="175"&gt;         &lt;p&gt;&lt;em&gt;Marcas en *&lt;/em&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="116"&gt;         &lt;p&gt;&lt;em&gt;s&lt;/em&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="175"&gt;         &lt;p&gt;&lt;em&gt;Marcas cuadradas&lt;/em&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="116"&gt;         &lt;p&gt;&lt;em&gt;d&lt;/em&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="175"&gt;         &lt;p&gt;&lt;em&gt;Marcas en diamante&lt;/em&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="116"&gt;         &lt;p&gt;&lt;em&gt;^&lt;/em&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="175"&gt;         &lt;p&gt;&lt;em&gt;Triangulo apuntando arriba&lt;/em&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;Dibujemos, finalmente las 3 funciones en la misma hoja gráfica:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;octave&amp;gt; hold on;&lt;/p&gt;    &lt;p&gt;octave&amp;gt; plot(x, abs(0.1*x) .* sin(x));      &lt;br /&gt;octave&amp;gt; plot(x, abs(0.2*x) .* sin(x),’r+’);       &lt;br /&gt;octave&amp;gt; plot(x, abs(0.3*x) .* sin(x),’mo’);&lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_iR0RF69pYa8/S-xss5dnH7I/AAAAAAAAABg/0PCiUL6EFkM/s1600-h/fig2%5B4%5D.jpg"&gt;&lt;img title="fig2" style="border-right: 0px; border-top: 0px; display: inline; margin-left: 0px; border-left: 0px; margin-right: 0px; border-bottom: 0px" height="223" alt="fig2" src="http://lh6.ggpht.com/_iR0RF69pYa8/S-xstVaE9UI/AAAAAAAAABk/z0HK3A8vjqs/fig2_thumb%5B3%5D.jpg?imgmax=800" width="368" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;En la siguiente entrega, nos ocuparemos de los ciclos y tendremos más ejemplos.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7530382439329445269-5215386973267722601?l=algoritmosyobjetos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://algoritmosyobjetos.blogspot.com/feeds/5215386973267722601/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://algoritmosyobjetos.blogspot.com/2010/05/ciclos-y-graficos-usando-matlab.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7530382439329445269/posts/default/5215386973267722601'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7530382439329445269/posts/default/5215386973267722601'/><link rel='alternate' type='text/html' href='http://algoritmosyobjetos.blogspot.com/2010/05/ciclos-y-graficos-usando-matlab.html' title='Ciclos y Gráficos usando Matlab'/><author><name>Andrea</name><uri>http://www.blogger.com/profile/15385933554653736610</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_iR0RF69pYa8/S-xssNFAXgI/AAAAAAAAABc/00mKPtESrc0/s72-c/fig1_thumb.jpg?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7530382439329445269.post-9031280406226764172</id><published>2010-04-29T16:30:00.001-03:00</published><updated>2010-04-29T16:30:50.054-03:00</updated><title type='text'>Novedades en C# 4.0</title><content type='html'>&lt;p&gt;El lenguaje de programación C# sigue evolucionando junto con el framework .Net. A la par del lanzamiento de la nueva versión de .NET&amp;#160; del VisualStudio 2010 surge la nueva versión de C# la 4.0.&lt;/p&gt;  &lt;p&gt;El lenguaje sigue evolucionando con nuevas características, en este artículo mencionaremos algunas de ellas.&lt;/p&gt;  &lt;p&gt;Se introduce una nueva palabra clave dynamic, utilizada para definir tipos dinámicos. Los tipos dinámicos son utilizados cuando, por ejemplo, se quiere acceder a código creado con un lenguaje dinámico como Iron-Python . Esta palabra clave le dice al compilador que el tipo de&amp;#160; los objetos se definirá en tiempo de ejecución y puede de esa manera responder a invocaciones dinámicas de métodos.&lt;/p&gt;  &lt;p&gt;El siguiente código nos muestra un ejemplo:&lt;/p&gt;  &lt;p&gt;dynamic miObjeto = ObtenerObjetoDePython();   &lt;br /&gt;miObjeto.Propiedad = “dato”    &lt;br /&gt;miObjeto.MetodoDinamico();&lt;/p&gt;  &lt;p&gt;En tiempo de ejecución se definirá el tipo de “miObjeto” y el ambiente de &lt;em&gt;run-time&lt;/em&gt; descubre las propiedades y genera el enlace dinámico al código correspondiente. El peligro, como con todo lenguaje sin tipificación fuerte, es que el método invocado no este definido en cuyo caso se produce una excepción en tiempo de ejecución. El uso que debería descartarse por completo para este tipo de declaración es usar una misma variable para diferentes tipos de objetos. Eso si que es feo.&lt;/p&gt;  &lt;p&gt;Otra de las novedades son los parametros con nombre y variables en métodos. Es posible darle nombre a los parámetros y hacerlos opcionales. Por ejemplo:&lt;/p&gt;  &lt;p&gt;public void unMetodo(int par1, String par2=&amp;quot;valordefecto&amp;quot;, decimal par2=99.85){   &lt;br /&gt;    &lt;br /&gt;//Hacer algo&lt;/p&gt;  &lt;p&gt;}&lt;/p&gt;  &lt;p&gt;En la declaración precedente hay dos parámetros con nombre y además con valores pode defecto. Esto permite transformarlos en opcionales.&lt;/p&gt;  &lt;p&gt;Si tenemos un objeto digamos objetoA que sea de la misma clase que unMetodo, podemos realizar las invocaciones de la siguiente forma&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;objetoA.unMetodo(4,”unvalor”,19.98);&lt;/p&gt;  &lt;p&gt;objetoA.unMetodo(4,”unvalor”);&lt;/p&gt;  &lt;p&gt;objetoA.unMetodo(4,par2:19.98);&lt;/p&gt;  &lt;p&gt;En el último caso se nombra explícitamente el parámetro ya que en esa posición el método tiene declarado un parámetro de tipo string. Es decir los parámetros con valores por defecto son opcionales en la invocación pero si hay diferencia de orden o se saltea alguno deben nombrarse explícitamente para evitar errores de compilación.&lt;/p&gt;  &lt;p&gt;Otra novedad es la covarianza de estructuras genéricas pero eso daría para un artículo entero.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7530382439329445269-9031280406226764172?l=algoritmosyobjetos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://algoritmosyobjetos.blogspot.com/feeds/9031280406226764172/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://algoritmosyobjetos.blogspot.com/2010/04/novedades-en-c-40.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7530382439329445269/posts/default/9031280406226764172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7530382439329445269/posts/default/9031280406226764172'/><link rel='alternate' type='text/html' href='http://algoritmosyobjetos.blogspot.com/2010/04/novedades-en-c-40.html' title='Novedades en C# 4.0'/><author><name>Gerardo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7530382439329445269.post-4096134218155050625</id><published>2010-04-19T15:26:00.000-03:00</published><updated>2010-04-19T15:26:03.156-03:00</updated><title type='text'>Object-Test y tipos asignados: Void.Safety en Eiffel</title><content type='html'>En un artículo anterior describimos el mecanismo de CAP utilizado para conseguir sistemas void-safety en Eiffel. Ahora describiremos las otras herramientas tipos asignados y la instrucción object test&lt;br /&gt;Object test provee un mecanismo de identificación de tipos en tiempo de ejecución (reemplaza también a la construcción anterior de Eiffel llamada intento de asignación). Básicamente verifica que una referencia tenga asignado un objeto de un tipo determinado. &amp;nbsp;La sintaxis es la siguiente:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;if &amp;nbsp;&lt;/b&gt;a&lt;b&gt;ttached&lt;/b&gt; {&lt;b&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;T} exp&lt;/span&gt;&lt;/i&gt; as&lt;/b&gt;&lt;i&gt; l &lt;/i&gt;&lt;b&gt;then&lt;/b&gt;&lt;br /&gt;&amp;nbsp;-- &lt;i&gt;Operaciones sobre l&lt;/i&gt;&lt;br /&gt;&lt;b&gt;end&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;La expression attached {T} exp as l &amp;nbsp; es una expression logica (booleana) que es verdadera cuando exp es una referencia que tiene asignado un objeto conformante con el tipo T. &amp;nbsp; La nueva variable l con alcance en el if pasa a tener asignado el objeto denotado por exp. &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;Entonces es seguro la siguiente secuencia:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;if attached &lt;/b&gt;&lt;i&gt;x &lt;/i&gt;&lt;b&gt;as&lt;i&gt; &lt;/i&gt;&lt;/b&gt;&lt;i&gt;l&lt;/i&gt; &lt;b&gt;then&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;i&gt;l.&lt;/i&gt;f (a)&lt;br /&gt;&lt;b&gt;end&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Dado que f(a) se invoca sobre l y sólo cuando este tiene un asignado un objeto (el mismo que referencia x en el momento del test). En el ejemplo último, el tipo T es implícitamente el tipo estático de x. El uso de l es obligatorio para void-safety porque evita problemas en caso de que en un ambiente multihilo sea modificado el valor de exp.&lt;br /&gt;&lt;br /&gt;El otro mecanismo que queda por ver el de tipos asignados. Este mecanismo es una extensión del sistema de tipo de Eiffel. Previamente cualquier variable de un tipo de referencia podía tener asignado void. Así todas las variables eran consideradas desasignables (&lt;i&gt;detachables&lt;/i&gt;). Ahora el standard de Eiffel soporta tipos asignados (&lt;i&gt;attached&lt;/i&gt;) o desasignables (&lt;i&gt;detachables&lt;/i&gt;). Si una variable es declarada como attached entonces el compilador previene que dicha variable puede asignársele Void o asignarse alguna cosa que pueda ser void.&lt;br /&gt;&lt;br /&gt;Ejemplos:&lt;br /&gt;x: &lt;b&gt;attached &lt;/b&gt;STRING&lt;br /&gt;&lt;br /&gt;y: &lt;b&gt;detachable &lt;/b&gt;STRING&lt;br /&gt;&lt;br /&gt;En el primer caso la &lt;i&gt;x&lt;/i&gt; siempre tendrá un objeto asignado y nunca podrá darse un error de &lt;i&gt;null reference,&lt;/i&gt; mientras en el segundo caso a la &lt;i&gt;y &lt;/i&gt;se le puede asignar &lt;i&gt;Void &lt;/i&gt;y la garantía de &lt;i&gt;void-safety&lt;/i&gt; debe proporcionarse por los otros medios mencionados.&lt;br /&gt;Para garantizar este mecanismo hay reglas que el compilador debe asegurar. Por ejemplo es posible asignar &lt;i&gt;x &lt;/i&gt;a &lt;i&gt;y&lt;/i&gt; pero no&lt;i&gt; y &lt;/i&gt;a &lt;i&gt;x.&lt;/i&gt;&lt;br /&gt;Es necesario utilizar un mecanismo de inicialización que prevenga que una variable de un tipo attached no sea asignada. Para casos como enteros o valores lógicos Eiffel ya proveía un mecanismo de inicialización (por ejemplo los enteros son inicializados en cero) Los tipos de referencia (&lt;i&gt;detachables&lt;/i&gt;) son asignados con Void, pero esto no sirve para los tipos de referencia attached. Para resolver el problema se utiliza el concepto de variable propiamente iniciada (&lt;i&gt;properly set&lt;/i&gt;) que significa que a la variable le fue dado un valor distinto de &lt;i&gt;Void &lt;/i&gt;. Se usa la siguiente regla:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Regla de inicialización de tipos asignados:&lt;/b&gt;&lt;br /&gt;&lt;i&gt;Si un programa usa una variable en cierta posición una de las siguientes propiedades debe cumplirse:&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;&amp;nbsp;La variable es propiamente asignada en esa posición. Esto se aplica a ambos tipos de variables: atributos y variables locales de una rutina.&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;La variable es un atributo y es propiamente inicializada al final de todo procedimiento de creación de la clase.&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div&gt;De esta manera completamos una visión general de los mecanismos de Eiffel para lograr evitar el problema de la null-reference. Cabe indicar que el compilador o el entorno de desarrollo traen facilidades para ir incorporando estos mecanismos. Por ejemplo es posible configurar que todos los tipos sean attached o detachable por defecto.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7530382439329445269-4096134218155050625?l=algoritmosyobjetos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://algoritmosyobjetos.blogspot.com/feeds/4096134218155050625/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://algoritmosyobjetos.blogspot.com/2010/04/object-test-y-tipos-asignados.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7530382439329445269/posts/default/4096134218155050625'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7530382439329445269/posts/default/4096134218155050625'/><link rel='alternate' type='text/html' href='http://algoritmosyobjetos.blogspot.com/2010/04/object-test-y-tipos-asignados.html' title='Object-Test y tipos asignados: Void.Safety en Eiffel'/><author><name>Gerardo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7530382439329445269.post-3285232634102607101</id><published>2010-04-13T17:56:00.002-03:00</published><updated>2010-04-13T17:56:25.448-03:00</updated><title type='text'>Nuevo sitio de Inteligencia Artificial</title><content type='html'>&lt;span class="Apple-style-span" style="color: #993333; font-family: verdana, helvetica, arial, sans-serif; font-size: 12px; line-height: 21px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="line-height: 20px;"&gt;La Inteligencia Artificial es una rama de las ciencias de la computación que tiene objetivos científicos e ingenieriles. Por un lado comprender el funcionamiento del cerebro humano y la inteligencia, estudiar mecanismos de comportamiento inteligente y por otro construir software que pueda exhibir comportamiento inteligente. Las aplicaciones de la Inteligencia Artificial y sus subcampos van desde robótica, reconocimiento de imagenes hasta control inteligente de dispositivos.&lt;/div&gt;&lt;div style="line-height: 20px;"&gt;Un nuevo sitio dedicado al tema y en donde es posible consultar un libro en línea (e-book) fue desarrollado por Uppersoft para que los interesados en el tema puedan introducirse.&lt;/div&gt;&lt;div style="line-height: 20px;"&gt;Pueden acceder a el en el siguiente enlace&amp;nbsp;&lt;a href="http://www.smartcomputing.com.ar/" style="color: #666666;"&gt;http://www.smartcomputing.com.ar&lt;/a&gt;&amp;nbsp;Ya están los primeros capítulos del libro Fundamentos de Inteligencia Computacional (escrito por Gerardo Rossel) en línea.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7530382439329445269-3285232634102607101?l=algoritmosyobjetos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://algoritmosyobjetos.blogspot.com/feeds/3285232634102607101/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://algoritmosyobjetos.blogspot.com/2010/04/nuevo-sitio-de-inteligencia-artificial.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7530382439329445269/posts/default/3285232634102607101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7530382439329445269/posts/default/3285232634102607101'/><link rel='alternate' type='text/html' href='http://algoritmosyobjetos.blogspot.com/2010/04/nuevo-sitio-de-inteligencia-artificial.html' title='Nuevo sitio de Inteligencia Artificial'/><author><name>Gerardo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7530382439329445269.post-1729810333492486835</id><published>2010-04-05T17:45:00.000-03:00</published><updated>2010-04-05T17:45:01.752-03:00</updated><title type='text'>Nueva versión en formato Digital</title><content type='html'>Dado los pedidos de lectores que nos comentaban los costos de envío a sudamerica hemos decidido lanzar una versión del libro Algoritmos, Objetos y Estructuras de Datos Una introducción a la programación por contratos en formato digital.&lt;br /&gt;Para adquirirlo hagan click en el siguiente botón:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.lulu.com/commerce/index.php?fBuyContent=8606764" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="Support independent publishing: Buy this e-book on Lulu." border="0" src="http://www.lulu.com/services/buy_now_buttons/images/book.gif" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7530382439329445269-1729810333492486835?l=algoritmosyobjetos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://algoritmosyobjetos.blogspot.com/feeds/1729810333492486835/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://algoritmosyobjetos.blogspot.com/2010/04/nueva-version-en-formato-digital.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7530382439329445269/posts/default/1729810333492486835'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7530382439329445269/posts/default/1729810333492486835'/><link rel='alternate' type='text/html' href='http://algoritmosyobjetos.blogspot.com/2010/04/nueva-version-en-formato-digital.html' title='Nueva versión en formato Digital'/><author><name>Gerardo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7530382439329445269.post-3846390572987197569</id><published>2010-03-22T15:43:00.001-03:00</published><updated>2010-04-04T22:58:12.330-03:00</updated><title type='text'>Patrones de Asignación Certificados (Certified Attachment Pattern)</title><content type='html'>&lt;span class="Apple-style-span" style="color: #333333; font-family: Times, 'Times New Roman', serif;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;En el artículo anterior sobre &amp;nbsp;&lt;a href="http://algoritmosyobjetos.blogspot.com/2010/03/eiffel-void-safety-no-mas-errores-de.html"&gt;Eiffel: void-safety&lt;/a&gt;&amp;nbsp;dimos los conceptos básicos que implementa el lenguaje Eiffel para conseguir sistemas que no produzcan el famoso error de referencia nula. O sea cuando se hace una llamada a una entidad que apunta a Void.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Times, 'Times New Roman', serif;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;La estrategia de Eiffel se basa en tres mecanismos:&amp;nbsp;Patrones de Asignación Certificados, Tipos Asignados y Object Test.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Times, 'Times New Roman', serif;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;En el articulo de hoy vamos a explicar el primer mecanismo, el de Patrones de Asignación Certificados o CAP. La idea es que en ciertos patrones de código se sabe certeramente que una referencia no puede ser Void. Un CAP es simplemente uno de estos patrones identificado. Por ejemplo el siguiente&amp;nbsp;patrón&amp;nbsp;simplemente verifica que x no sea Void:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Times, 'Times New Roman', serif;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Times, 'Times New Roman', serif;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Times, 'Times New Roman', serif;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;if x /= Void then&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;-- Hacer cualquier cosa menos asignar algo a x&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;x.f (a)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;end&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Times, 'Times New Roman', serif;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Times, 'Times New Roman', serif;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;Si garantizamos que &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;x &lt;/span&gt;no se le asigna nada entonces es segura la invocación &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;x.f(a)&lt;/span&gt; dado que &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;x&lt;/span&gt; no es &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Void&lt;/span&gt;. Este código es un CAP para x. &amp;nbsp;Para que esto valga (lo mismo con otros CAPs) &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;x&lt;/span&gt; debe ser una variable local o un argumento, no puede ser un atributo de&amp;nbsp;la clase. Es lógico esta prohibición dado que un atributo podría ser asignado a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Void &lt;/span&gt;al invocar una rutina.&amp;nbsp;Lo que decimos es:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Times, 'Times New Roman', serif;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Times, 'Times New Roman', serif;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;Una llamada &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;x.f(...) &lt;/span&gt;donde &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;x&lt;/span&gt; es un argumento formal o una variable local de una rutina es void-safe (segura para void) si la llamada verifica que:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Times, 'Times New Roman', serif; line-height: 31px;"&gt;Aparece en el alcance de un testeo de void involucandro a &lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; line-height: 31px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;x&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Times, 'Times New Roman', serif; line-height: 31px;"&gt;No es precedida, en dicho alcance, por una asignación para &lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; line-height: 31px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;x&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Times, 'Times New Roman', serif; line-height: 31px;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Times, 'Times New Roman', serif;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Times, 'Times New Roman', serif;"&gt;En siguientes artículos continuaremos analizado esta interesante propiedad implementada en el lenguaje Eiffel que nos permite tener sistemas orientados a objetos seguros para &lt;i&gt;void.&lt;/i&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7530382439329445269-3846390572987197569?l=algoritmosyobjetos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://algoritmosyobjetos.blogspot.com/feeds/3846390572987197569/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://algoritmosyobjetos.blogspot.com/2010/03/patrones-de-asignacion-certificados.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7530382439329445269/posts/default/3846390572987197569'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7530382439329445269/posts/default/3846390572987197569'/><link rel='alternate' type='text/html' href='http://algoritmosyobjetos.blogspot.com/2010/03/patrones-de-asignacion-certificados.html' title='Patrones de Asignación Certificados (Certified Attachment Pattern)'/><author><name>Gerardo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7530382439329445269.post-6367759765631427125</id><published>2010-03-16T11:28:00.001-03:00</published><updated>2010-04-04T22:58:32.417-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eiffel'/><category scheme='http://www.blogger.com/atom/ns#' term='null reference'/><category scheme='http://www.blogger.com/atom/ns#' term='Void-safety'/><title type='text'>Eiffel: Void-safety. No más errores de null reference!!</title><content type='html'>Al momento de escribir el libro todavía no estaba implementado completamente el mecanismo que lograba &lt;i&gt;void-safety&lt;/i&gt; en Eiffel. El problema que se evita es conocido como&amp;nbsp;excepción&amp;nbsp;por&lt;i&gt; null reference &lt;/i&gt;o &lt;i&gt;void call&lt;/i&gt; (según el lenguaje y entorno).&lt;br /&gt;El problema se presentaba cuando se realiza una llamada de la forma:&lt;b&gt;&amp;nbsp;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;x.f(a)&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;si&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;x &lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;era una referencia a Void (null reference). La tipificación estática no es suficiente, ya que ésta asegura (en el ejemplo anterior) que existe una &lt;i&gt;feature &lt;/i&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;f&lt;/span&gt; aplicable a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;x&lt;/span&gt;. Lo que garantizaría la &lt;i&gt;void-safety&lt;/i&gt; es que en el momento de la ejecución haya un objeto asignado a &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;x&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;. En .Net este error es&amp;nbsp;comúnmente&amp;nbsp;encontrado mediante una excepción con el mensaje:&amp;nbsp;"Object reference not set to an instance of an object".&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;El mecanismo que logra evitar este problema esta completamente implementado a partir de EiffelStudio 6.4.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;Recordaran que en Eiffel&amp;nbsp;existen&amp;nbsp;dos clases de tipos: expandidos y de referencia. Con los primeros no hay problema por su propia semántica, siempre hay un objeto. El problema podría presentarse&amp;nbsp;solamente&amp;nbsp;con los tipos no expandidos.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;En resumen, lo que estamos diciendo, es que una entidad puede ser asiganda (&lt;i&gt;attached&lt;/i&gt;) o &lt;i&gt;&amp;nbsp;no asignada &lt;/i&gt;(&lt;i&gt;detached&lt;/i&gt;) en este último caso es &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Void&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt; (&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;null&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt; en otros lenguajes). Una llamada a una entidad n&lt;i&gt;o asignada &lt;/i&gt;provoca un error en tiempo de ejecución. Eiffel implementa un mecanismo para resolver este problema.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;La asignación es vista (hasta ahora) cómo una propiedad en tiempo de ejecución, es decir una entidad en algún momento de la ejecución del programa puede estar asignada o no asignada. Para lograr la &lt;i&gt;void-safety &lt;/i&gt;ampliamos este concepto de asignación para considerar también la&lt;i&gt; asignación estática&lt;/i&gt;. Este último tipo de asignación puede ser evaluado en tiempo de compilación. El mecanismo implementado asegura que se cumpla una importante propiedad: la&lt;i&gt; consistencia de asignación&lt;/i&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;&lt;b&gt;Consistencia de Asignación:&lt;/b&gt; si una entidad &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;b&gt;x&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt; es&amp;nbsp;estáticamente&amp;nbsp;asignada sus valores posibles en tiempo de ejecución son dinámicamente asignados.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;Para garantizar entonces que no haya llamadas a void (void call) se incorpora al lenguaje la siguiente regla:&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;&lt;b&gt;Regla de void-safety&lt;/b&gt;: Una llamada de la forma &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;x.f(a) &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;es permitida solamente si &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;x &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;es estáticamente asignada.&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;Al garantizar que &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;x &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;es estáticamente asignada, por la regla de la consistencia de la&amp;nbsp;asignación&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;x &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;no puede asumir valores &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;void &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;en ninguna llamada.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;Para garantizar la void-safety Eiffel utiliza una estrategia basada en tres mecanismos:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;Patrones de asignación certificados (Certified Attachment Patterns o CAPs), que básicamente representan esquemas de código que el compilador puede garantizar ser seguros.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;Tipos asignados. Son tipos que no pueden tener valores nulos (void).&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;Instrucción "Object Test". Esta instrucción permite a los programadores tratar de forma especial los valores nulos&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;En los siguientes artículos iremos describiendo cada uno de estos mecanismos en detalle.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7530382439329445269-6367759765631427125?l=algoritmosyobjetos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://algoritmosyobjetos.blogspot.com/feeds/6367759765631427125/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://algoritmosyobjetos.blogspot.com/2010/03/eiffel-void-safety-no-mas-errores-de.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7530382439329445269/posts/default/6367759765631427125'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7530382439329445269/posts/default/6367759765631427125'/><link rel='alternate' type='text/html' href='http://algoritmosyobjetos.blogspot.com/2010/03/eiffel-void-safety-no-mas-errores-de.html' title='Eiffel: Void-safety. No más errores de null reference!!'/><author><name>Gerardo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7530382439329445269.post-1991057074028682272</id><published>2010-03-06T14:17:00.000-03:00</published><updated>2010-03-16T11:31:32.137-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Algoritmos y Objetos'/><title type='text'>Tabla de Contenidos</title><content type='html'>Este blog está dedicado al libro &lt;i&gt;Algoritmos, Objetos y Estructura de Datos. Una introducción a la Programación con Contratos&lt;/i&gt; (Gerardo Rossel - Andrea V. Manna 2009).  Trataremos temas relacionados al libro, ejercicios, erratas, etc.&lt;br /&gt;Para los que aún no tienen el libro a continuación la tabla de contenido:&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #993333; font-family: verdana, helvetica, arial, sans-serif; font-size: 12px; line-height: 21px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #993333; font-family: verdana, helvetica, arial, sans-serif; font-size: 12px; line-height: 21px;"&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;strong style="font-size: 1em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;1. &lt;/strong&gt;&lt;strong style="font-size: 1em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Conceptos Introductorios&lt;/strong&gt;&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;1.1. Un enfoque orientado a objetos&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;1.2. ¿Qué es un algoritmo?&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;1.3. Compilación de Programas&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;1.4. Códigos ASCII y UNICODE&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;1.5. Máquinas Virtuales&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;1.6. Algoritmos y sentencias&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;1.6.1. Decisión&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;1.6.1.1. Estructuras de decisión anidadas&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;1.6.1.2. Estructuras de selección y lenguajes&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;1.6.1.3. Estructura de decisión generalizada o múltiple&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;1.6.2. Repetición o Iteración&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;1.6.2.1. Estructura repetir-hastaque&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;1.6.2.2. Estructura mientras-hacer-finmientras&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;1.6.2.3. Estructura para-hacer-finpara&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;1.6.2.4. Estructuras de repetición y lenguajes&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;1.7. Ejercicios&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;strong style="font-size: 1em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;2. &lt;/strong&gt;&lt;strong style="font-size: 1em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Primeros pasos con Objetos&lt;/strong&gt;&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;2.1. ¿Qué son los objetos?&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;2.2. Sentencias.&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;2.3. Nuestro primer programa: Hola Mundo&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;2.4. Trabajando con EiffelStudio&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;2.5. Creación de objetos&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;2.6. Relación entre variables y objetos&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;2.7. El objeto Current&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;2.8. Código C#&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;strong style="font-size: 1em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;3. &lt;/strong&gt;&lt;strong style="font-size: 1em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Tipos de Abstractos de Datos&lt;/strong&gt;&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;3.1. El método axiomático&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;3.2. El TAD CUENTA_BANCARIA&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;3.3. El método de las poscondiciones.&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;3.4. Ejercicios&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;strong style="font-size: 1em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;4. &lt;/strong&gt;&lt;strong style="font-size: 1em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Clases y Objetos&lt;/strong&gt;&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;4.1. TAD y Clases&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;4.1.1. Traslación de las operaciones de TAD&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;4.2. Rutinas y Atributos&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;4.3. El concepto de propiedad&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;4.4. Pasaje de argumentos&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;4.4.1. Pasaje de Argumentos por Valor&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;4.4.2. Pasaje de Argumentos por Referencia&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;4.4.3. Pasaje por Copia/Restauración&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;4.4.4. Pasaje de Argumentos por Valor Constante&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;4.4.5. Pasaje de Argumentos por Nombre&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;4.4.6. Pasaje de Argumentos en Eiffel&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;4.4.7. Pasaje de Argumentos en C#&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;4.5. Clusters y espacios de Nombres&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;4.6. Accesibilidad&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;strong style="font-size: 1em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;5. &lt;/strong&gt;&lt;strong style="font-size: 1em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Contratos&lt;/strong&gt;&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;5.1. Precondiciones&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;5.2. Poscondiciones&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;5.3. Invariante de Clase&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;5.4. Que no son las aserciones&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;5.5. Corrección de ciclos&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;5.6. La instrucción check&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;5.7. Monitoreo de aserciones&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;5.8. Vista de contrato&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;5.9. Ejercicios&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;6. &lt;strong style="font-size: 1em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Estructuras de Datos (primera parte)&lt;/strong&gt;&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;6.1. Clases Genéricas&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;6.1.1. Clases genéricas en C#&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;6.2. Arreglos&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;6.2.1. Creación de un arreglo&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;6.2.2. Acceso y notación bracket&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;6.2.3. Arreglos en C#&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;6.3. Pilas y Colas&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;6.4. Listas&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;6.4.1. Movimiento del Cursor&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;6.4.2. Modificación de la lista&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;6.5. Implementaciones de Listas&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;6.5.1. Listas encadenadas&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;6.5.2. Listas doblemente encadenadas&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;6.5.3. Operaciones sobre Listas&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;6.6. Tuplas&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;6.7. Iteradores&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;6.8. Estructuras en C#&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;6.9. Ejercicios&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;7. &lt;strong style="font-size: 1em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Complejidad Algorítmica&lt;/strong&gt;&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;7.1. Análisis de Algoritmos&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;7.2. La notación “Big O”&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;7.3. Complejidad de un algoritmo&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;7.3.1. Comparando complejidades&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;strong style="font-size: 1em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;8. &lt;/strong&gt;&lt;strong style="font-size: 1em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Algoritmos: Recursividad&lt;/strong&gt;&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;8.1. Características&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;8.2. ¿Iteración ó Recursión?&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;8.3. Contratos y recursividad&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;8.4. Ejercicios&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;strong style="font-size: 1em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;9. &lt;/strong&gt;&lt;strong style="font-size: 1em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Algoritmos: Ordenación y Búsqueda&lt;/strong&gt;&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;9.1. Búsqueda&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;9.1.1. Búsqueda Secuencial o Lineal&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;9.1.2. Búsqueda Binaria&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;9.1.3. Algoritmos de Búsqueda en C#&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;9.2. Ordenación&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;9.2.1. Ordenación por selección directa&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;9.2.2. Ordenación por el método de Burbujeo&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;9.2.3. Ordenación rápida ó Quicksort&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;strong style="font-size: 1em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;10. &lt;/strong&gt;&lt;strong style="font-size: 1em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Introducción a la Herencia&lt;/strong&gt;&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;10.1.¿Qué es Herencia?&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;10.2.Herencia un ejemplo&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;10.3.Polimorfismo&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;10.4.Conformidad de tipos&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;10.4.1. El tipo Current y los tipos anclados&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;10.4.2. Herencia no conformante&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;10.5.Invocando al antecesor&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;10.6.Herencia en C#&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;10.7.Testeo de objetos y asignación condicional&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;10.8.Ejercicios&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;strong style="font-size: 1em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;11. &lt;/strong&gt;&lt;strong style="font-size: 1em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Tipos, rutinas y objetos&lt;/strong&gt;&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;11.1.Introducción&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;11.2.Agentes en Eiffel&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;11.2.1. Tipos de los agentes&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;11.2.2. Llamando a un agente&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;11.2.3. Agentes e iteradores&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;11.3.Delegados y Eventos en C#&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;11.3.1. Delegados&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;11.3.2. Eventos&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;11.4.Tipos de Referencia y Tipos expandidos&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;11.4.1. Tipos Básicos&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;11.5.Tipos de Valor en C#&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;11.5.1. Tipos simples&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;11.5.2. Tipos enumerados y estructuras&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;11.5.3. Tipos anulables&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;11.5.4. Boxing y Unboxing&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;11.6.Rutinas “Once” y Constantes&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;11.7.Miembros y Clases Estáticas en C#&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;11.8.Ejercicios&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;strong style="font-size: 1em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;12. &lt;/strong&gt;&lt;strong style="font-size: 1em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Arboles&lt;/strong&gt;&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;12.1.¿Qué es un Árbol?&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;12.2.Árboles binarios&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;12.2.1. Árbol Binario en C#&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;12.3.Recorrer un árbol binario&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;12.3.1. Recorrido en pre-orden&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;12.3.2. Recorrido en-orden&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;12.3.3. Recorrido post-orden&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;12.3.4. Complejidad de los recorridos&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;12.4.Árboles binarios de búsqueda&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;12.4.1. Insertar un elemento&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;12.4.2. Borrar un elemento&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;12.5.Ejercicios&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;strong style="font-size: 1em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;13. &lt;/strong&gt;&lt;strong style="font-size: 1em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Herencia Parte II&lt;/strong&gt;&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;13.1.Introducción&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;13.2.Redefinición: Covarianza&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;13.3.Renombrado y otras operaciones&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;13.3.1. Fusión de abstracciones&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;13.3.2. Choque de nombres&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;13.4.Herencia repetida&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;13.4.1. La clausula select.&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;13.4.2. Compartir o replicar&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;13.5.Congelar características y clases.&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;13.6.Contratos y herencia&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;13.6.1. Invariante en herencia&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;13.6.2. Pre y poscondiciones&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;13.7.Generalidad restringida&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;13.8.Interfaces en C#&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;13.9.Ejercicios&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;strong style="font-size: 1em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;14. &lt;/strong&gt;&lt;strong style="font-size: 1em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Grafos&lt;/strong&gt;&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;14.1.Introducción&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;14.2.Definiciones&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;14.3.Implementación de Grafos&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;14.3.1. Representación con lista de adyacencia&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;14.3.2. Representación por matriz de adyacencia&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;14.3.3. Implementación con lista de ejes y vértices.&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;14.4.Algoritmos sobre grafos&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;14.4.1. Profundidad primero&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;14.4.2. Ancho Primero&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;14.4.3. Camino más corto: el algoritmo de Dijkstra&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;14.5.Ejercicios&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;strong style="font-size: 1em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;15. &lt;/strong&gt;&lt;strong style="font-size: 1em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Diseño Orientado a Objetos&lt;/strong&gt;&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;15.1.Introducción&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;15.2.Elicitación de Clases&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;15.2.1. Casos de Uso&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;15.3.BON, UML: describiendo Clases.&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;15.3.1. Diagramas de Clase&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;15.3.2. Diagrama de Secuencias&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;15.3.3. Eso no es todo.&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;15.4.Un pequeño problema&lt;/div&gt;&lt;div style="font-size: 1em; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;15.5.Ejercicios&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7530382439329445269-1991057074028682272?l=algoritmosyobjetos.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://algoritmosyobjetos.blogspot.com/feeds/1991057074028682272/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://algoritmosyobjetos.blogspot.com/2010/03/libro-algoritmos-objetos-y-estructuras.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7530382439329445269/posts/default/1991057074028682272'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7530382439329445269/posts/default/1991057074028682272'/><link rel='alternate' type='text/html' href='http://algoritmosyobjetos.blogspot.com/2010/03/libro-algoritmos-objetos-y-estructuras.html' title='Tabla de Contenidos'/><author><name>Gerardo</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
