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

<channel>
	<title>Programar en Python</title>
	<atom:link href="http://python.blogaliza.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://python.blogaliza.org</link>
	<description></description>
	<pubDate>Mon, 01 Oct 2007 10:32:14 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6</generator>
	<language>en</language>
			<item>
		<title>A sucesión de Fibonacci</title>
		<link>http://python.blogaliza.org/2007/04/24/a-sucesion-de-fibonacci/</link>
		<comments>http://python.blogaliza.org/2007/04/24/a-sucesion-de-fibonacci/#comments</comments>
		<pubDate>Tue, 24 Apr 2007 15:16:08 +0000</pubDate>
		<dc:creator>Néstor García</dc:creator>
		
		<category><![CDATA[Exemplos]]></category>

		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://python.blogaliza.org/2007/04/24/a-sucesion-de-fibonacci/</guid>
		<description><![CDATA[<p>A sucesión de fibonacci é unha serie de numeros enteiros no que cada termo resulta da suma dos dous anteriores, deste xeito , e partindo do 1 a secuencia será: 1, 1, 2, 3, 5, 8, 13, 21, 34&#8230;..</p>
<p>A secuencia ten unha serie de características como por exemplo:</p>
<ul>
<li>Ó dividir un termo entre o anterior a partir do cuarto valor, por exemplo 3/2, 5/3, 8/5… o resultado aproximarase ó numero 1,6 tamén chamado a proporción áurea de Fibonacci.</li>
<li>A suma de dez números Fibonacci consecutivos é sempre 11 veces superior ó séptimo número da serie.</li>
<p><code></code></p>
<li>A suma dos n primeiros números é igual ó número que ocupa a posición n+2 menos un.</li>
</ul>
<p>Ademais esta sucesión relaciónase con moitos elementos da natureza, dende a reprodución animal, anatomía vexetal e animal ou relacións entre sexos nas especies.</p>
<p><strong>Código</strong></p>
<pre><span class="comment">#! /usr/bin/env python
# -*- coding: utf-8 -*-</span>

n = <span class="py-builtins">int</span>(raw_input(<span class="string">"¿Valor tope da serie? "</span>))
<span class="keyword">print</span> <span class="string">" Serie de Fibonacci "</span>

a, b = 0, 1

<span class="keyword">while</span> b &lt;= n:
    <span class="keyword">print</span> b
    a, b = b, a + b</pre>
<a href='http://chuza.org/submit.php?url= http://python.blogaliza.org/2007/04/24/a-sucesion-de-fibonacci/'><img src="/images/chuza.gif" alt="Chuzame!" title="Chuzame!" /> chuzame</a> - ]]></description>
			<content:encoded><![CDATA[<p>A sucesión de fibonacci é unha serie de numeros enteiros no que cada termo resulta da suma dos dous anteriores, deste xeito , e partindo do 1 a secuencia será: 1, 1, 2, 3, 5, 8, 13, 21, 34&#8230;..</p>
<p>A secuencia ten unha serie de características como por exemplo:</p>
<ul>
<li>Ó dividir un termo entre o anterior a partir do cuarto valor, por exemplo 3/2, 5/3, 8/5… o resultado aproximarase ó numero 1,6 tamén chamado a proporción áurea de Fibonacci.</li>
<li>A suma de dez números Fibonacci consecutivos é sempre 11 veces superior ó séptimo número da serie.</li>
<p><code></code></p>
<li>A suma dos n primeiros números é igual ó número que ocupa a posición n+2 menos un.</li>
</ul>
<p>Ademais esta sucesión relaciónase con moitos elementos da natureza, dende a reprodución animal, anatomía vexetal e animal ou relacións entre sexos nas especies.</p>
<p><strong>Código</strong></p>
<pre><span class="comment">#! /usr/bin/env python
# -*- coding: utf-8 -*-</span>

n = <span class="py-builtins">int</span>(raw_input(<span class="string">"¿Valor tope da serie? "</span>))
<span class="keyword">print</span> <span class="string">" Serie de Fibonacci "</span>

a, b = 0, 1

<span class="keyword">while</span> b &lt;= n:
    <span class="keyword">print</span> b
    a, b = b, a + b</pre>
<a href='http://chuza.org/submit.php?url= http://python.blogaliza.org/2007/04/24/a-sucesion-de-fibonacci/'><img src="/images/chuza.gif" alt="Chuzame!" title="Chuzame!" /> chuzame</a> - ]]></content:encoded>
			<wfw:commentRss>http://python.blogaliza.org/2007/04/24/a-sucesion-de-fibonacci/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Codificación/decodificación de texto co algoritmo rot-13</title>
		<link>http://python.blogaliza.org/2007/04/11/codificaciondecodificacion-de-texto-co-algoritmo-rot-13/</link>
		<comments>http://python.blogaliza.org/2007/04/11/codificaciondecodificacion-de-texto-co-algoritmo-rot-13/#comments</comments>
		<pubDate>Wed, 11 Apr 2007 06:09:05 +0000</pubDate>
		<dc:creator>Xosé Otero</dc:creator>
		
		<category><![CDATA[Exemplos]]></category>

		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://python.blogaliza.org/2007/04/11/codificaciondecodificacion-de-texto-co-algoritmo-rot-13/</guid>
		<description><![CDATA[<p>O algoritmo <a href="http://pt.wikipedia.org/wiki/ROT13" title="Algoritmo rot-13 na wikipedia en portugués">rot-13</a> é un algoritmo para codificar e decodificar texto. O algoritmo rot-13 fundaméntase en que no código <a href="http://pt.wikipedia.org/wiki/ASCII" title="ASCII na wikipedia en portugués">ASCII</a> os 26 caracteres entre o &#8220;A&#8221; e o &#8220;Z&#8221;, así como entre o &#8220;a&#8221; e o &#8220;z&#8221;, son consecutivos. Por tanto, se se moven 13 posición a estes caracteres (a metade dos 26 caracteres do inglés), conséguese outro caracteres que se pode recuperar movendo outros 13 espazos. Este algoritmo é moi sinxelo e por tanto non serve máis que para exemplo, pero en ningún caso para un uso serio.</p>
<p>O código desta anotación é un módulo chamado <em>rot13</em> que implementa unha función chamada <em>encrypt</em> que codifica/decodifica unha cadea de caracteres. Internamente <em>encrypt</em> chama a un módulo privado chamado <em>_rot13</em> que é o que fai a codificación dun caracterer. O código tamén se pode executar coma un script por si mesmo e neste caso codificará/decodificará o que se lle pase ó script coma parámetros.</p>
<p><span id="more-31"></span>Para aplicar este algoritmo hai que ter claro que non se pode codificar tódolos caracteres posibles con rot-13, só 26 (ou 52 se diferenciamos entre maiúsculas e minúsculas). Así, o primeiro que se fai na función <em>_rot13</em> é verificar se o caracter se pode codificar/decodificar e devolve-lo intacto se non se pode.</p>
<p><strong>Código</strong></p>
<pre><span class="comment">#! /usr/bin/env python
# -*- coding: iso-8859-15 -*-
</span><span class="string">"""Módulo que codifica e decodifica un texto co algoritmo rot13.
Este algoritmo non é seguro e só se debe empregar coma exemplo."""</span>

__all__ = [<span class="string">"encrypt"</span>]

__ord_A = <span class="py-builtins">ord</span>(<span class="string">"A"</span>)
__num_chars = <span class="py-builtins">ord</span>(<span class="string">"Z"</span>) - <span class="py-builtins">ord</span>(<span class="string">"A"</span>) + 1

<span class="keyword">def</span> <span class="function-name">_rot13</span>(character):
    <span class="string">"""Devolve un caracter codificado co algoriitmo rot-13."""
    index = <span class="py-builtins">ord</span>(character.upper()) - __ord_A
    <span class="keyword">if</span> <span class="keyword">not</span> character.isalpha() <span class="keyword">or</span> index &gt; 127:
        <span class="keyword">return</span> character

    new_character = <span class="py-builtins">chr</span>((index + 13) % __num_chars + __ord_A)
    <span class="keyword">if</span> character.islower():
        new_character = new_character.lower()

    <span class="keyword">return</span> new_character

<span class="keyword">def</span> <span class="function-name">encrypt</span>(text):
    <span class="string">"""Devolve un texto codificado co algoritmo rot-13."""</span>
    encrypted_text = []
    <span class="keyword">for</span> character <span class="keyword">in</span> text:
        encrypted_text.append(_rot13(character))
    <span class="keyword">return</span> <span class="string">""</span>.join(encrypted_text)

<span class="keyword">if</span> <span class="py-builtins">__name__</span> == <span class="string">"__main__"</span>:
    <span class="comment"># Execución do algoritmo ós parámetros do script</span>
    <span class="keyword">import</span> sys
    <span class="keyword">print</span> encrypt(<span class="string">" "</span>.join(sys.argv[1:]))</span></pre>
<a href='http://chuza.org/submit.php?url= http://python.blogaliza.org/2007/04/11/codificaciondecodificacion-de-texto-co-algoritmo-rot-13/'><img src="/images/chuza.gif" alt="Chuzame!" title="Chuzame!" /> chuzame</a> - ]]></description>
			<content:encoded><![CDATA[<p>O algoritmo <a href="http://pt.wikipedia.org/wiki/ROT13" title="Algoritmo rot-13 na wikipedia en portugués">rot-13</a> é un algoritmo para codificar e decodificar texto. O algoritmo rot-13 fundaméntase en que no código <a href="http://pt.wikipedia.org/wiki/ASCII" title="ASCII na wikipedia en portugués">ASCII</a> os 26 caracteres entre o &#8220;A&#8221; e o &#8220;Z&#8221;, así como entre o &#8220;a&#8221; e o &#8220;z&#8221;, son consecutivos. Por tanto, se se moven 13 posición a estes caracteres (a metade dos 26 caracteres do inglés), conséguese outro caracteres que se pode recuperar movendo outros 13 espazos. Este algoritmo é moi sinxelo e por tanto non serve máis que para exemplo, pero en ningún caso para un uso serio.</p>
<p>O código desta anotación é un módulo chamado <em>rot13</em> que implementa unha función chamada <em>encrypt</em> que codifica/decodifica unha cadea de caracteres. Internamente <em>encrypt</em> chama a un módulo privado chamado <em>_rot13</em> que é o que fai a codificación dun caracterer. O código tamén se pode executar coma un script por si mesmo e neste caso codificará/decodificará o que se lle pase ó script coma parámetros.</p>
<p><span id="more-31"></span>Para aplicar este algoritmo hai que ter claro que non se pode codificar tódolos caracteres posibles con rot-13, só 26 (ou 52 se diferenciamos entre maiúsculas e minúsculas). Así, o primeiro que se fai na función <em>_rot13</em> é verificar se o caracter se pode codificar/decodificar e devolve-lo intacto se non se pode.</p>
<p><strong>Código</strong></p>
<pre><span class="comment">#! /usr/bin/env python
# -*- coding: iso-8859-15 -*-
</span><span class="string">"""Módulo que codifica e decodifica un texto co algoritmo rot13.
Este algoritmo non é seguro e só se debe empregar coma exemplo."""</span>

__all__ = [<span class="string">"encrypt"</span>]

__ord_A = <span class="py-builtins">ord</span>(<span class="string">"A"</span>)
__num_chars = <span class="py-builtins">ord</span>(<span class="string">"Z"</span>) - <span class="py-builtins">ord</span>(<span class="string">"A"</span>) + 1

<span class="keyword">def</span> <span class="function-name">_rot13</span>(character):
    <span class="string">"""Devolve un caracter codificado co algoriitmo rot-13."""
    index = <span class="py-builtins">ord</span>(character.upper()) - __ord_A
    <span class="keyword">if</span> <span class="keyword">not</span> character.isalpha() <span class="keyword">or</span> index &gt; 127:
        <span class="keyword">return</span> character

    new_character = <span class="py-builtins">chr</span>((index + 13) % __num_chars + __ord_A)
    <span class="keyword">if</span> character.islower():
        new_character = new_character.lower()

    <span class="keyword">return</span> new_character

<span class="keyword">def</span> <span class="function-name">encrypt</span>(text):
    <span class="string">"""Devolve un texto codificado co algoritmo rot-13."""</span>
    encrypted_text = []
    <span class="keyword">for</span> character <span class="keyword">in</span> text:
        encrypted_text.append(_rot13(character))
    <span class="keyword">return</span> <span class="string">""</span>.join(encrypted_text)

<span class="keyword">if</span> <span class="py-builtins">__name__</span> == <span class="string">"__main__"</span>:
    <span class="comment"># Execución do algoritmo ós parámetros do script</span>
    <span class="keyword">import</span> sys
    <span class="keyword">print</span> encrypt(<span class="string">" "</span>.join(sys.argv[1:]))</span></pre>
<a href='http://chuza.org/submit.php?url= http://python.blogaliza.org/2007/04/11/codificaciondecodificacion-de-texto-co-algoritmo-rot-13/'><img src="/images/chuza.gif" alt="Chuzame!" title="Chuzame!" /> chuzame</a> - ]]></content:encoded>
			<wfw:commentRss>http://python.blogaliza.org/2007/04/11/codificaciondecodificacion-de-texto-co-algoritmo-rot-13/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Ola mundo!</title>
		<link>http://python.blogaliza.org/2007/04/09/ola-mundo/</link>
		<comments>http://python.blogaliza.org/2007/04/09/ola-mundo/#comments</comments>
		<pubDate>Mon, 09 Apr 2007 18:28:43 +0000</pubDate>
		<dc:creator>Néstor García</dc:creator>
		
		<category><![CDATA[Exemplos]]></category>

		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://python.blogaliza.org/2007/04/09/ola-mundo/</guid>
		<description><![CDATA[<p>Imos realizar o <em>Ola mundo!</em> en python. Este programa é normalmente o primeiro exemplo cando se aprende calquera linguaxe de programación. Este programa serve para comezar a familiarizarnos coa sintaxe da linguaxe e coa forma de traballar.</p>
<p>A funcionalidade do <em>Ola mundo!</em> é moi sinxela, posto que tan só visualiza por pantalla un &#8220;Ola mundo!&#8221;.</p>
<p><strong>Código</strong></p>
<pre><span class="comment">#! /usr/bin/env python
# -*- coding: utf-8 -*-
</span>
<span class="keyword">print</span> <span class="string">"Ola mundo!"</span></pre>
<a href='http://chuza.org/submit.php?url= http://python.blogaliza.org/2007/04/09/ola-mundo/'><img src="/images/chuza.gif" alt="Chuzame!" title="Chuzame!" /> chuzame</a> - ]]></description>
			<content:encoded><![CDATA[<p>Imos realizar o <em>Ola mundo!</em> en python. Este programa é normalmente o primeiro exemplo cando se aprende calquera linguaxe de programación. Este programa serve para comezar a familiarizarnos coa sintaxe da linguaxe e coa forma de traballar.</p>
<p>A funcionalidade do <em>Ola mundo!</em> é moi sinxela, posto que tan só visualiza por pantalla un &#8220;Ola mundo!&#8221;.</p>
<p><strong>Código</strong></p>
<pre><span class="comment">#! /usr/bin/env python
# -*- coding: utf-8 -*-
</span>
<span class="keyword">print</span> <span class="string">"Ola mundo!"</span></pre>
<a href='http://chuza.org/submit.php?url= http://python.blogaliza.org/2007/04/09/ola-mundo/'><img src="/images/chuza.gif" alt="Chuzame!" title="Chuzame!" /> chuzame</a> - ]]></content:encoded>
			<wfw:commentRss>http://python.blogaliza.org/2007/04/09/ola-mundo/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Programación funcional</title>
		<link>http://python.blogaliza.org/2007/04/03/programacion-funcional/</link>
		<comments>http://python.blogaliza.org/2007/04/03/programacion-funcional/#comments</comments>
		<pubDate>Tue, 03 Apr 2007 18:34:22 +0000</pubDate>
		<dc:creator>Xosé Otero</dc:creator>
		
		<category><![CDATA[Teoría]]></category>

		<category><![CDATA[Titorial]]></category>

		<guid isPermaLink="false">http://python.blogaliza.org/2007/04/03/programacion-funcional/</guid>
		<description><![CDATA[<p>A <a href="http://en.wikipedia.org/wiki/Functional_programming" title="Programación funcional na wikipedia en inglés">programación funcional</a> consiste na utilización do concepto matemático de función. As funcións son estructuras que aceptan cero ou máis parámetros de entrada e devolver só un parámetro coma saída. As fncións só poden modifica-los parámetros de entrada e nunca datos externos a elas, polo que se evitan efectos colaterais ó chamalas. Grazas a estas características, o código é sinxelo de ler e facilmente reutilizable. As operacións básicos que se poden efectuar na programación funcional son a composición de funcións e a recursividade.</p>
<p>Exemplos de linguaxes funcionais son <a href="http://pt.wikipedia.org/wiki/Lisp" title="Lisp na wikipedia en portugués">Lisp</a>, <a href="http://pt.wikipedia.org/wiki/Scheme" title="Scheme na wikipedia en portugués">Scheme</a> e <a href="http://pt.wikipedia.org/wiki/Haskell_%28linguagem_de_programa%C3%A7%C3%A3o%29" title="Haskell na wikipedia en portugués">Haskell</a>.</p>
<p><span id="more-24"></span><strong>Composición de funcións</strong><a title="composicion" name="composicion"></a></p>
<p>A composición de funcións é a operación fundamental na programación funcional. A composición de funcións consiste en empregar como parámetros dunha función outras funcións. Por exemplo, supoñendo as funcións <em>f</em> e <em>g</em>, a operación <em>f(g())</em> executa a función <em>g</em> e pásalle o resultado á <em>f</em> como parámetro.</p>
<p><strong>Recursividade</strong><a title="recursividade" name="recursividade"></a></p>
<p>Unha función recursiva é aquela que se chama a si mesma para obte-lo resultado. Para os problemas de natureza recursiva o emprego de funcións recursivas é evidente.</p>
<p>Por exemplo, o factorial de <em>n</em> defínese coma a multiplicación de <em>n</em> polo factorial de <em>n - 1</em>, é dicir <em>n! = n * (n - 1)!</em>. O xeito de codificar o factorial sería:</p>
<pre>FUNCIÓN factorial(n)
    SE n = 0
        ENTÓN resultado = 1
        SENÓN resultado = n * <strong>factorial(n - 1)</strong>
    FinSE
FinFUNCION</pre>
<p>A maioría de problemas son iterativos, é dicir, un conxunto de instruccións atópanse nun bucle que se executa ata que se produce unha condición de saída. Aínda que a natureza dun problema non sexa recursiva, sempre se poderá codificar recursivamente, igual que os problemas recursivos se poden codificar iterativamente.</p>
<p>Por exemplo, a solución á suma dos primeiros <em>n</em> números enteiros é en principio iterativa. A solución iterativa sería ir sumando tódolos números <em>dende o 1 ata n</em> e a condición de saída sería que <em>alcanzásemos o número</em> dado.</p>
<pre>FUNCIÓN suma_ata(n)
    resultado = 0
    MENTRES n &gt; 0
        resultado = resultado + n
        n = n - 1
    FinMENTRES
FinFUNCIÓN</pre>
<p>Esta función iterativa pódese convertir en recursiva do seguinte xeito:</p>
<pre>FUNCIÓN suma_ata(n)
    SE n &lt;= 0
        ENTÓN suma_ata = 0
        SENÓN suma_ata = n + <strong>suma_ata(n - 1)</strong>
    FinSE
FinFUNCIÓN</pre>
<a href='http://chuza.org/submit.php?url= http://python.blogaliza.org/2007/04/03/programacion-funcional/'><img src="/images/chuza.gif" alt="Chuzame!" title="Chuzame!" /> chuzame</a> - ]]></description>
			<content:encoded><![CDATA[<p>A <a href="http://en.wikipedia.org/wiki/Functional_programming" title="Programación funcional na wikipedia en inglés">programación funcional</a> consiste na utilización do concepto matemático de función. As funcións son estructuras que aceptan cero ou máis parámetros de entrada e devolver só un parámetro coma saída. As fncións só poden modifica-los parámetros de entrada e nunca datos externos a elas, polo que se evitan efectos colaterais ó chamalas. Grazas a estas características, o código é sinxelo de ler e facilmente reutilizable. As operacións básicos que se poden efectuar na programación funcional son a composición de funcións e a recursividade.</p>
<p>Exemplos de linguaxes funcionais son <a href="http://pt.wikipedia.org/wiki/Lisp" title="Lisp na wikipedia en portugués">Lisp</a>, <a href="http://pt.wikipedia.org/wiki/Scheme" title="Scheme na wikipedia en portugués">Scheme</a> e <a href="http://pt.wikipedia.org/wiki/Haskell_%28linguagem_de_programa%C3%A7%C3%A3o%29" title="Haskell na wikipedia en portugués">Haskell</a>.</p>
<p><span id="more-24"></span><strong>Composición de funcións</strong><a title="composicion" name="composicion"></a></p>
<p>A composición de funcións é a operación fundamental na programación funcional. A composición de funcións consiste en empregar como parámetros dunha función outras funcións. Por exemplo, supoñendo as funcións <em>f</em> e <em>g</em>, a operación <em>f(g())</em> executa a función <em>g</em> e pásalle o resultado á <em>f</em> como parámetro.</p>
<p><strong>Recursividade</strong><a title="recursividade" name="recursividade"></a></p>
<p>Unha función recursiva é aquela que se chama a si mesma para obte-lo resultado. Para os problemas de natureza recursiva o emprego de funcións recursivas é evidente.</p>
<p>Por exemplo, o factorial de <em>n</em> defínese coma a multiplicación de <em>n</em> polo factorial de <em>n - 1</em>, é dicir <em>n! = n * (n - 1)!</em>. O xeito de codificar o factorial sería:</p>
<pre>FUNCIÓN factorial(n)
    SE n = 0
        ENTÓN resultado = 1
        SENÓN resultado = n * <strong>factorial(n - 1)</strong>
    FinSE
FinFUNCION</pre>
<p>A maioría de problemas son iterativos, é dicir, un conxunto de instruccións atópanse nun bucle que se executa ata que se produce unha condición de saída. Aínda que a natureza dun problema non sexa recursiva, sempre se poderá codificar recursivamente, igual que os problemas recursivos se poden codificar iterativamente.</p>
<p>Por exemplo, a solución á suma dos primeiros <em>n</em> números enteiros é en principio iterativa. A solución iterativa sería ir sumando tódolos números <em>dende o 1 ata n</em> e a condición de saída sería que <em>alcanzásemos o número</em> dado.</p>
<pre>FUNCIÓN suma_ata(n)
    resultado = 0
    MENTRES n &gt; 0
        resultado = resultado + n
        n = n - 1
    FinMENTRES
FinFUNCIÓN</pre>
<p>Esta función iterativa pódese convertir en recursiva do seguinte xeito:</p>
<pre>FUNCIÓN suma_ata(n)
    SE n &lt;= 0
        ENTÓN suma_ata = 0
        SENÓN suma_ata = n + <strong>suma_ata(n - 1)</strong>
    FinSE
FinFUNCIÓN</pre>
<a href='http://chuza.org/submit.php?url= http://python.blogaliza.org/2007/04/03/programacion-funcional/'><img src="/images/chuza.gif" alt="Chuzame!" title="Chuzame!" /> chuzame</a> - ]]></content:encoded>
			<wfw:commentRss>http://python.blogaliza.org/2007/04/03/programacion-funcional/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Programación orientada a obxectos</title>
		<link>http://python.blogaliza.org/2007/04/03/programacion-orientada-a-obxectos/</link>
		<comments>http://python.blogaliza.org/2007/04/03/programacion-orientada-a-obxectos/#comments</comments>
		<pubDate>Tue, 03 Apr 2007 17:09:56 +0000</pubDate>
		<dc:creator>Néstor García</dc:creator>
		
		<category><![CDATA[Teoría]]></category>

		<category><![CDATA[Titorial]]></category>

		<guid isPermaLink="false">http://python.blogaliza.org/2007/04/03/programacion-orientada-a-obxectos/</guid>
		<description><![CDATA[<p>A <a href="http://en.wikipedia.org/wiki/Object-Oriented_Programming" title="Programación orientada a obxectos na wikipedia en inglés"> programazón orientada a obxectos</a> consiste na utilización de obxectos como elementos básicos de traballo. Os obxectos son a forma natural de representar un mundo cheo de obxectos tanto físicos coma simbólicos. Estes obxectos interactuan entre si mediante o paso de mensaxes para chegar a realizar calquera tipo de programa.</p>
<p>Exemplos de linguaxes orientadas a obxectos son <a href="http://pt.wikipedia.org/wiki/Smalltalk" title="Smalltalk na wikipedia en portugués">Smalltalk</a>, <a href="http://gl.wikipedia.org/wiki/C%2B%2B" title="C++ na galipedia">C++</a> ou <a href="http://gl.wikipedia.org/wiki/Ada" title="Ada na galipedia">Ada</a>.</p>
<p><span id="more-16"></span><strong>Obxecto</strong><a title="obxecto" name="obxecto"></a></p>
<p>A estructura dun obxecto ven definida pola <strong>clase</strong> á que pertence. Un obxecto está composto por <strong>atributos</strong> e <strong>métodos</strong>. Os atributos son os datos que o definen e os métodos son as accións que pode realizar. De tal xeito que poden haber varios obxectos da mesma clase pero distintos entre si.</p>
<p>O paso de mensaxes da programación orientada a obxectos é equivalente á chamada de funcións na programación imperativa. Unha forma extricta de orientación a obxectos esixiría que a única forma de comunicación co obxecto fose o paso de mensaxes, impidindo o acceso directo ós atributos.</p>
<p><strong>Características</strong><a title="caracteristicas" name="caracteristicas"></a></p>
<p>A programación orientada a obxectos caracterízase por ter unha serie de propiedades como son:</p>
<ol>
<li><strong>Abstracción:</strong> É a captación das características esenciais dun obxecto, así como o seu comportamiento.</li>
<li><strong>Encapsulamiento: </strong>É a ocultación da implementación concreta do obxecto, deixando visible só o xeito de tratar co obxecto.</li>
<li><strong>Polimorfismo:</strong> É a capacidade de que métodos que se comportan de forma distinta compartan o mesmo nome.</li>
<li><strong>Herencia:</strong> Propiedade pola cal as subclases dunha clase adquiren as propiedades e métodos desta. Na herencia fálase de clases bases e derivadas ou clases nais e fillas.</li>
</ol>
<p><strong>Avantaxes</strong><a title="avantaxes" name="avantaxes"></a></p>
<p>A programación orientada a obxetos ten unha serie de avantaxes que a fan idónea para o desenvolvemento de programas.</p>
<ol>
<li><strong>Comprensión</strong>: Tanto os datos que compoñen os obxectos, coma os procedementos que os manipulan, están agrupados en clases, que se corresponden cas estructuras de información cas que traballa o programa.</li>
<li><strong>Flexibilidade</strong>: Ó ter relacionados os procedementos que manipulan os datos cos datos a tratar, cualquera cambio que se realice sobre eles quedará reflexado automáticamente en calquera lugar onde aparezan estes datos.</li>
<li><strong>Estabilidade</strong>: Xa que permite o tratamiento diferenciado de aqueles obxectos que permanecen constantes no tempo sobre aqueles que cambian con frecuencia, deste xeito permite aislar as partes do programa que permanecen inalterables no tempo.</li>
<li><strong>Reutilización</strong>: Os programas que traten as mesmas estructuras de información poden reutilizar tanto as definicions de obxectos empregadas noutros programas e incluso os procedementos que os manipulan. Deste xeito, o desenvolvemento dun programa pode chegar a ser unha simple combinación de obxectos xa definidos.</li>
</ol>
<a href='http://chuza.org/submit.php?url= http://python.blogaliza.org/2007/04/03/programacion-orientada-a-obxectos/'><img src="/images/chuza.gif" alt="Chuzame!" title="Chuzame!" /> chuzame</a> - ]]></description>
			<content:encoded><![CDATA[<p>A <a href="http://en.wikipedia.org/wiki/Object-Oriented_Programming" title="Programación orientada a obxectos na wikipedia en inglés"> programazón orientada a obxectos</a> consiste na utilización de obxectos como elementos básicos de traballo. Os obxectos son a forma natural de representar un mundo cheo de obxectos tanto físicos coma simbólicos. Estes obxectos interactuan entre si mediante o paso de mensaxes para chegar a realizar calquera tipo de programa.</p>
<p>Exemplos de linguaxes orientadas a obxectos son <a href="http://pt.wikipedia.org/wiki/Smalltalk" title="Smalltalk na wikipedia en portugués">Smalltalk</a>, <a href="http://gl.wikipedia.org/wiki/C%2B%2B" title="C++ na galipedia">C++</a> ou <a href="http://gl.wikipedia.org/wiki/Ada" title="Ada na galipedia">Ada</a>.</p>
<p><span id="more-16"></span><strong>Obxecto</strong><a title="obxecto" name="obxecto"></a></p>
<p>A estructura dun obxecto ven definida pola <strong>clase</strong> á que pertence. Un obxecto está composto por <strong>atributos</strong> e <strong>métodos</strong>. Os atributos son os datos que o definen e os métodos son as accións que pode realizar. De tal xeito que poden haber varios obxectos da mesma clase pero distintos entre si.</p>
<p>O paso de mensaxes da programación orientada a obxectos é equivalente á chamada de funcións na programación imperativa. Unha forma extricta de orientación a obxectos esixiría que a única forma de comunicación co obxecto fose o paso de mensaxes, impidindo o acceso directo ós atributos.</p>
<p><strong>Características</strong><a title="caracteristicas" name="caracteristicas"></a></p>
<p>A programación orientada a obxectos caracterízase por ter unha serie de propiedades como son:</p>
<ol>
<li><strong>Abstracción:</strong> É a captación das características esenciais dun obxecto, así como o seu comportamiento.</li>
<li><strong>Encapsulamiento: </strong>É a ocultación da implementación concreta do obxecto, deixando visible só o xeito de tratar co obxecto.</li>
<li><strong>Polimorfismo:</strong> É a capacidade de que métodos que se comportan de forma distinta compartan o mesmo nome.</li>
<li><strong>Herencia:</strong> Propiedade pola cal as subclases dunha clase adquiren as propiedades e métodos desta. Na herencia fálase de clases bases e derivadas ou clases nais e fillas.</li>
</ol>
<p><strong>Avantaxes</strong><a title="avantaxes" name="avantaxes"></a></p>
<p>A programación orientada a obxetos ten unha serie de avantaxes que a fan idónea para o desenvolvemento de programas.</p>
<ol>
<li><strong>Comprensión</strong>: Tanto os datos que compoñen os obxectos, coma os procedementos que os manipulan, están agrupados en clases, que se corresponden cas estructuras de información cas que traballa o programa.</li>
<li><strong>Flexibilidade</strong>: Ó ter relacionados os procedementos que manipulan os datos cos datos a tratar, cualquera cambio que se realice sobre eles quedará reflexado automáticamente en calquera lugar onde aparezan estes datos.</li>
<li><strong>Estabilidade</strong>: Xa que permite o tratamiento diferenciado de aqueles obxectos que permanecen constantes no tempo sobre aqueles que cambian con frecuencia, deste xeito permite aislar as partes do programa que permanecen inalterables no tempo.</li>
<li><strong>Reutilización</strong>: Os programas que traten as mesmas estructuras de información poden reutilizar tanto as definicions de obxectos empregadas noutros programas e incluso os procedementos que os manipulan. Deste xeito, o desenvolvemento dun programa pode chegar a ser unha simple combinación de obxectos xa definidos.</li>
</ol>
<a href='http://chuza.org/submit.php?url= http://python.blogaliza.org/2007/04/03/programacion-orientada-a-obxectos/'><img src="/images/chuza.gif" alt="Chuzame!" title="Chuzame!" /> chuzame</a> - ]]></content:encoded>
			<wfw:commentRss>http://python.blogaliza.org/2007/04/03/programacion-orientada-a-obxectos/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Tipos de datos predefinidos</title>
		<link>http://python.blogaliza.org/2007/03/26/tipos-de-datos-predefinidos/</link>
		<comments>http://python.blogaliza.org/2007/03/26/tipos-de-datos-predefinidos/#comments</comments>
		<pubDate>Mon, 26 Mar 2007 19:48:48 +0000</pubDate>
		<dc:creator>Xosé Otero</dc:creator>
		
		<category><![CDATA[Python]]></category>

		<category><![CDATA[Titorial]]></category>

		<guid isPermaLink="false">http://python.blogaliza.org/2007/03/26/tipos-de-datos/</guid>
		<description><![CDATA[<p>Un <strong>tipo de dato</strong> defínese polos valores que pode tomar mailas operacións que se poden realizar sobre estes valores. Os tipos de datos pódense dividir en simples e compostos. Os <strong>tipos de atos simples</strong> son aqueles que non se poden descompoñer en datos máis sinxelos. Os <strong>datos compostos</strong> son aqueles que se compoñen dun ou varios datos sinxelos conformando unha estructura máis complexa.</p>
<p>Os tipos de datos sinxelos predefinidos en python son: booleanos, números enteiros e números reais. Os tipos de datos compostos predefinidos en python son: cadenas de caracteres, tuplas, listas, dicionarios e clases.</p>
<p>Para comproba-lo tipo dun dato emprégase a función <strong><em>type</em>()</strong> que toma como parámetro o dato do que queremos sabe-lo seu tipo.</p>
<a href='http://chuza.org/submit.php?url= http://python.blogaliza.org/2007/03/26/tipos-de-datos-predefinidos/'><img src="/images/chuza.gif" alt="Chuzame!" title="Chuzame!" /> chuzame</a> - ]]></description>
			<content:encoded><![CDATA[<p>Un <strong>tipo de dato</strong> defínese polos valores que pode tomar mailas operacións que se poden realizar sobre estes valores. Os tipos de datos pódense dividir en simples e compostos. Os <strong>tipos de atos simples</strong> son aqueles que non se poden descompoñer en datos máis sinxelos. Os <strong>datos compostos</strong> son aqueles que se compoñen dun ou varios datos sinxelos conformando unha estructura máis complexa.</p>
<p>Os tipos de datos sinxelos predefinidos en python son: booleanos, números enteiros e números reais. Os tipos de datos compostos predefinidos en python son: cadenas de caracteres, tuplas, listas, dicionarios e clases.</p>
<p>Para comproba-lo tipo dun dato emprégase a función <strong><em>type</em>()</strong> que toma como parámetro o dato do que queremos sabe-lo seu tipo.</p>
<a href='http://chuza.org/submit.php?url= http://python.blogaliza.org/2007/03/26/tipos-de-datos-predefinidos/'><img src="/images/chuza.gif" alt="Chuzame!" title="Chuzame!" /> chuzame</a> - ]]></content:encoded>
			<wfw:commentRss>http://python.blogaliza.org/2007/03/26/tipos-de-datos-predefinidos/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Tipos de datos sinxelos</title>
		<link>http://python.blogaliza.org/2007/03/26/tipos-de-datos-sinxelos/</link>
		<comments>http://python.blogaliza.org/2007/03/26/tipos-de-datos-sinxelos/#comments</comments>
		<pubDate>Mon, 26 Mar 2007 19:36:17 +0000</pubDate>
		<dc:creator>Xosé Otero</dc:creator>
		
		<category><![CDATA[Python]]></category>

		<category><![CDATA[Titorial]]></category>

		<guid isPermaLink="false">http://python.blogaliza.org/2007/03/26/tipos-de-datos-sinxelos/</guid>
		<description><![CDATA[<p><strong>Números enteiros (<em>int</em> ou <em>long</em>)</strong><a title="enteiros" name="enteiros"></a></p>
<p>Hai dúas clases de enteiros: normais e longos. Os <strong>enteiros normais</strong> son os que pode gardar a <a href="http://es.wikipedia.org/wiki/CPU" title="CPU na wikipedia en castelán">CPU</a> na que se execute a máquina (en máquinas de 32 bits van dende <em>-2.147.483.648</em> ata <em>2.147.483.647</em>, en máquinas de 64 bits van dende <em>-9.223.372.036.854.775.808</em> ata <em>9.223.372.036.854.775.807</em>). Os <strong>enteiros longos</strong> non teñen un límite fixado, a única limitación é a cantidade de memoria do sistema para almacenalo. Os enteiros normais son máis eficientes por estar soportados directamente pola CPU do sistema. Pódese forzar que un número sexa considerado coma enteiro longo engadindo un <em>L</em> ó final. Así, <em>100L</em> será un enteiro longo ainda que se poida gardar coma enteiro normal.</p>
<p>As dúas clases de enteiros pódense mistura-las dúas nunha operación. Neste caso, o resultado será un enteiro longo.</p>
<p><span id="more-12"></span><strong>Booleanos (<em>bool</em>)</strong><a title="booleanos" name="booleanos"></a></p>
<p>Os booleanos só poden tomar dous valores: <em>False</em> (falso) ou <em>True</em> (verdadeiro). Os booleanos son un subtipo dos números enteiros, polo que se poden empregar coma se fosen enteiros, <em>False</em> valendo <em>0</em> e <em>True</em> valendo <em>1</em>; así, pódense empregar con eles as mesmas operacións que cos enteiros ou mistura-los cos enteiros nas mesmas operacións.</p>
<p>Os booleanos son o resultado das operacións de comparación.</p>
<p>Como exemplo pensemos nunha función que verifique se un número é par ou impar:</p>
<pre><span class="keyword">def</span> <span class="function-name">e_par</span>(numero):
    <span class="string">"""Comproba se numero e enteiro"""</span>
    <span class="keyword">return</span> (numero % 2) == 0</pre>
<p>Empregando esta función: <em>e_par(1)</em> devolve <em>False</em>, <em>e_par(2)</em> devolve <em>True</em>.</p>
<p><strong>Bases dos números enteiros</strong><a title="bases" name="bases"></a></p>
<p>Os números enteiros pódense escribir en tres bases distintas: decimal, octal ou hexadecimal. Para escribir un número en decimal só hai que escribi-lo número. Para escribir un número en octal escríbese un <em>0</em> diante do número. Para escribir un número en hexadecimal escríbese <em>0x</em> diante do número.</p>
<p>Exemplos:</p>
<pre>123         <span class="comment"># 123 en decimal</span>
0123        <span class="comment"># 83 en decimal</span>
0x123       <span class="comment"># 291 en decimal</span></pre>
<p><strong>Números reais (<em>float</em>)</strong><a title="reais" name="reais"></a></p>
<p>Os números reais almacénanse internamente <a href="http://pt.wikipedia.org/wiki/V%C3%ADrgula_flutuante" title="Coma flutuante na wikipedia en portugués">coma flutuante</a>. Este formato ten un tamaño establecido (64 bits), polo que a na maioría dos casos só se poderá almacenar unha aproximación ó número. Así, o valor <em>0.1</em> almacénase coma <em>0.10000000000000001</em>. Os valores que se poden representar van dende o <em>±2.2250738585072020×10<sup>−308</sup></em> ata o <em>±1.7976931348623157×10<sup>308</sup></em>.</p>
<p>Os números reais represéntase cun punto separando a parte enteira da parte fracionaria e opcionalmente un <em>e</em> e o exponente (x10) ó que está elevado. Por exemplo: <em>-1.1</em>, <em>1.2e23</em> ou <em>0.1e-2</em>. Esta representación é a empregada polos angloxasóns.</p>
<p><strong>Operacións matemáticas</strong><a title="matematicas" name="matematicas"></a></p>
<p>Sobre os números pódense realizar tódalas operacións básicas: <em>-</em> (negación), <em>+</em> (suma), <em>-</em> (resta), <em>*</em> (multiplicación), <em>/</em> (división), <em>%</em> (módulo) e <em>**</em> (exponenciación). Para realizar operacións máis complexas tense que emprega-lo módulo <em>math</em>. Hai que ter coidado coa división entre enteiros, posto que devolve só a parte enteira do resultado. Para obte-lo resultado real hai que convertir algún dos operadores a real.</p>
<p>Exemplos:</p>
<pre>-1          <span class="comment"># -1</span>
1 + 2       <span class="comment"># 3</span>
1 - 2       <span class="comment"># -1</span>
2.5 * 2     <span class="comment"># 5</span>
1 / 2       <span class="comment"># 0</span>
1.0 / 2     <span class="comment"># 0.5</span>
5 % 2       <span class="comment"># 1</span>
2 ** 3      <span class="comment"># 8</span></pre>
<p><strong>Operacións lóxicas</strong><a title="loxicas" name="loxicas"></a></p>
<p>As operacións lóxicas son: not (negación), and (conxunción) e or (ou). not devolve o valor boolean contrario do operando sobre o que opera. and devolverá True só se os dous operandos son True. or devolverá True cando algún dos operandos sexa True.<br />
Exemplos:</p>
<pre><span class="keyword">not</span> <span class="py-pseudo-keyword">True</span>       <span class="comment"># False</span>
<span class="py-pseudo-keyword">True</span> <span class="keyword">and</span> <span class="py-pseudo-keyword">False</span> <span class="comment"># False</span>
<span class="py-pseudo-keyword">True</span> <span class="keyword">or</span> <span class="py-pseudo-keyword">False</span>  <span class="comment"># True</span></pre>
<p><strong>Operacións de comparación</strong><a title="comparacion" name="comparacion"></a></p>
<p>As operacións de comparación son: <em>==</em> (igualdade), <em>!=</em> (desigualdade), <em>&lt;</em> (menor), <em>&gt;</em> (maior), <em>&lt;=</em> (menor ou igual) e <em>&gt;=</em> (maior ou igual)</p>
<p>Exemplos:</p>
<pre>1.0 == 1    <span class="comment"># True</span>
1.0 != 1    <span class="comment"># False</span>
1 &lt; 2       <span class="comment"># True</span>
1 &gt; 2       <span class="comment"># False</span>
1 &lt;= 2      <span class="comment"># True</span>
1 &gt;= 1      <span class="comment"># True</span></pre>
<p><strong>Operacións sobre bits</strong><a title="bits" name="bits"></a></p>
<p>Estas operacións traballan sobre tódolos os bits dos operandos. Estas operacións son: <em>~</em> (negación), <em>&amp;</em> (and), <em>|</em> (or) e <em>^</em> (or exclusiva). <em>~</em> é un operador unario que cambia tódolos bits do operando. <em>&amp;</em> devolve un número cos bits a <em>1</em> cando os dous bits desa posición dos operandos son <em>1</em>, <em>0</em> en caso contrario. <em>|</em> devolve un número cos bits a <em>1</em> cando algún bit desa operación dos operadores son <em>1</em>, <em>0</em> en caso contrario. <em>^</em> devolve un número cos bits a <em>1</em> cando só un dos bits desa posición dos operandos está a <em>1</em>, <em>0</em> en caso contrario.<br />
Exemplos:</p>
<pre>~0x00          <span class="comment"># -1 (0xffffffff)</span>
0x0f | 0xf0    <span class="comment"># 0xff</span>
0x0f % 0xf0    <span class="comment"># 0x0f</span>
0x0f &amp; 0xf0    <span class="comment"># 0x00</span>
0xFF ^ 0xF0    <span class="comment"># 0x0f</span></pre>
<p><strong>Conversión de tipos</strong><a title="conversion" name="conversion"></a></p>
<p>Os tipos numéricos pódense converter dun tipo a outro empregando <em>bool()</em>, <em>int()</em>, <em>long()</em> e <em>float()</em>. <em>bool()</em> converte calquera valor distinto de <em>0</em> a <em>True</em>, <em>False</em> en caso contrario. <em>int()</em> e <em>long()</em> converten o valor a enteiro normal ou longo respectivamente. <em>float()</em> converten o valor a real.<br />
Exemplos:</p>
<pre><span class="py-builtins">bool</span>(23)     <span class="comment"># True</span>
<span class="py-builtins">bool</span>(0.0)    <span class="comment"># False</span>
<span class="py-builtins">int</span>(<span class="py-pseudo-keyword">True</span>)    <span class="comment"># 1</span>
<span class="py-builtins">long</span>(2.5)    <span class="comment"># 2</span>
<span class="py-builtins">float</span>(<span class="py-pseudo-keyword">False</span>) <span class="comment"># 0.0</span>
<span class="py-builtins">float</span>(2)     <span class="comment"># 2.0</span></pre>
<p><strong>Mistura de tipos</strong><a title="mistura" name="mistura"></a></p>
<p>Nunha operación pódense misturar dous distintos tipos de datos numéricos. Ó realiza-la operación mírase cal dos datos é dun tipo máis xenérico e convértese (implicitamente) o outro a ese formato, dando como resultado un valor do deste mesmo tipo.</p>
<p>Debido a que hai tres tipos de datos numéricos, só haberá tres tipos de combinacións posibles. Se operamos un booleado cun enteiro, o booleano convertirase a enteiro e o resultado da operación será enteiro. Se operamos un enteiro cun real, o enteiro convertirase a real e o resultado da operación será real. Se operamos un booleano cun real, o booleano convertirase a real e o resultado da operación será real.</p>
<p>Exemplos:</p>
<pre><span class="py-builtins">type</span>(<span class="py-pseudo-keyword">True</span> + 2) <span class="comment"># &lt;type 'int'&gt;</span>
<span class="py-builtins">type</span>(2 + 2.0)  <span class="comment"># &lt;type 'float'&gt;</span></pre>
<a href='http://chuza.org/submit.php?url= http://python.blogaliza.org/2007/03/26/tipos-de-datos-sinxelos/'><img src="/images/chuza.gif" alt="Chuzame!" title="Chuzame!" /> chuzame</a> - ]]></description>
			<content:encoded><![CDATA[<p><strong>Números enteiros (<em>int</em> ou <em>long</em>)</strong><a title="enteiros" name="enteiros"></a></p>
<p>Hai dúas clases de enteiros: normais e longos. Os <strong>enteiros normais</strong> son os que pode gardar a <a href="http://es.wikipedia.org/wiki/CPU" title="CPU na wikipedia en castelán">CPU</a> na que se execute a máquina (en máquinas de 32 bits van dende <em>-2.147.483.648</em> ata <em>2.147.483.647</em>, en máquinas de 64 bits van dende <em>-9.223.372.036.854.775.808</em> ata <em>9.223.372.036.854.775.807</em>). Os <strong>enteiros longos</strong> non teñen un límite fixado, a única limitación é a cantidade de memoria do sistema para almacenalo. Os enteiros normais son máis eficientes por estar soportados directamente pola CPU do sistema. Pódese forzar que un número sexa considerado coma enteiro longo engadindo un <em>L</em> ó final. Así, <em>100L</em> será un enteiro longo ainda que se poida gardar coma enteiro normal.</p>
<p>As dúas clases de enteiros pódense mistura-las dúas nunha operación. Neste caso, o resultado será un enteiro longo.</p>
<p><span id="more-12"></span><strong>Booleanos (<em>bool</em>)</strong><a title="booleanos" name="booleanos"></a></p>
<p>Os booleanos só poden tomar dous valores: <em>False</em> (falso) ou <em>True</em> (verdadeiro). Os booleanos son un subtipo dos números enteiros, polo que se poden empregar coma se fosen enteiros, <em>False</em> valendo <em>0</em> e <em>True</em> valendo <em>1</em>; así, pódense empregar con eles as mesmas operacións que cos enteiros ou mistura-los cos enteiros nas mesmas operacións.</p>
<p>Os booleanos son o resultado das operacións de comparación.</p>
<p>Como exemplo pensemos nunha función que verifique se un número é par ou impar:</p>
<pre><span class="keyword">def</span> <span class="function-name">e_par</span>(numero):
    <span class="string">"""Comproba se numero e enteiro"""</span>
    <span class="keyword">return</span> (numero % 2) == 0</pre>
<p>Empregando esta función: <em>e_par(1)</em> devolve <em>False</em>, <em>e_par(2)</em> devolve <em>True</em>.</p>
<p><strong>Bases dos números enteiros</strong><a title="bases" name="bases"></a></p>
<p>Os números enteiros pódense escribir en tres bases distintas: decimal, octal ou hexadecimal. Para escribir un número en decimal só hai que escribi-lo número. Para escribir un número en octal escríbese un <em>0</em> diante do número. Para escribir un número en hexadecimal escríbese <em>0x</em> diante do número.</p>
<p>Exemplos:</p>
<pre>123         <span class="comment"># 123 en decimal</span>
0123        <span class="comment"># 83 en decimal</span>
0x123       <span class="comment"># 291 en decimal</span></pre>
<p><strong>Números reais (<em>float</em>)</strong><a title="reais" name="reais"></a></p>
<p>Os números reais almacénanse internamente <a href="http://pt.wikipedia.org/wiki/V%C3%ADrgula_flutuante" title="Coma flutuante na wikipedia en portugués">coma flutuante</a>. Este formato ten un tamaño establecido (64 bits), polo que a na maioría dos casos só se poderá almacenar unha aproximación ó número. Así, o valor <em>0.1</em> almacénase coma <em>0.10000000000000001</em>. Os valores que se poden representar van dende o <em>±2.2250738585072020×10<sup>−308</sup></em> ata o <em>±1.7976931348623157×10<sup>308</sup></em>.</p>
<p>Os números reais represéntase cun punto separando a parte enteira da parte fracionaria e opcionalmente un <em>e</em> e o exponente (x10) ó que está elevado. Por exemplo: <em>-1.1</em>, <em>1.2e23</em> ou <em>0.1e-2</em>. Esta representación é a empregada polos angloxasóns.</p>
<p><strong>Operacións matemáticas</strong><a title="matematicas" name="matematicas"></a></p>
<p>Sobre os números pódense realizar tódalas operacións básicas: <em>-</em> (negación), <em>+</em> (suma), <em>-</em> (resta), <em>*</em> (multiplicación), <em>/</em> (división), <em>%</em> (módulo) e <em>**</em> (exponenciación). Para realizar operacións máis complexas tense que emprega-lo módulo <em>math</em>. Hai que ter coidado coa división entre enteiros, posto que devolve só a parte enteira do resultado. Para obte-lo resultado real hai que convertir algún dos operadores a real.</p>
<p>Exemplos:</p>
<pre>-1          <span class="comment"># -1</span>
1 + 2       <span class="comment"># 3</span>
1 - 2       <span class="comment"># -1</span>
2.5 * 2     <span class="comment"># 5</span>
1 / 2       <span class="comment"># 0</span>
1.0 / 2     <span class="comment"># 0.5</span>
5 % 2       <span class="comment"># 1</span>
2 ** 3      <span class="comment"># 8</span></pre>
<p><strong>Operacións lóxicas</strong><a title="loxicas" name="loxicas"></a></p>
<p>As operacións lóxicas son: not (negación), and (conxunción) e or (ou). not devolve o valor boolean contrario do operando sobre o que opera. and devolverá True só se os dous operandos son True. or devolverá True cando algún dos operandos sexa True.<br />
Exemplos:</p>
<pre><span class="keyword">not</span> <span class="py-pseudo-keyword">True</span>       <span class="comment"># False</span>
<span class="py-pseudo-keyword">True</span> <span class="keyword">and</span> <span class="py-pseudo-keyword">False</span> <span class="comment"># False</span>
<span class="py-pseudo-keyword">True</span> <span class="keyword">or</span> <span class="py-pseudo-keyword">False</span>  <span class="comment"># True</span></pre>
<p><strong>Operacións de comparación</strong><a title="comparacion" name="comparacion"></a></p>
<p>As operacións de comparación son: <em>==</em> (igualdade), <em>!=</em> (desigualdade), <em>&lt;</em> (menor), <em>&gt;</em> (maior), <em>&lt;=</em> (menor ou igual) e <em>&gt;=</em> (maior ou igual)</p>
<p>Exemplos:</p>
<pre>1.0 == 1    <span class="comment"># True</span>
1.0 != 1    <span class="comment"># False</span>
1 &lt; 2       <span class="comment"># True</span>
1 &gt; 2       <span class="comment"># False</span>
1 &lt;= 2      <span class="comment"># True</span>
1 &gt;= 1      <span class="comment"># True</span></pre>
<p><strong>Operacións sobre bits</strong><a title="bits" name="bits"></a></p>
<p>Estas operacións traballan sobre tódolos os bits dos operandos. Estas operacións son: <em>~</em> (negación), <em>&amp;</em> (and), <em>|</em> (or) e <em>^</em> (or exclusiva). <em>~</em> é un operador unario que cambia tódolos bits do operando. <em>&amp;</em> devolve un número cos bits a <em>1</em> cando os dous bits desa posición dos operandos son <em>1</em>, <em>0</em> en caso contrario. <em>|</em> devolve un número cos bits a <em>1</em> cando algún bit desa operación dos operadores son <em>1</em>, <em>0</em> en caso contrario. <em>^</em> devolve un número cos bits a <em>1</em> cando só un dos bits desa posición dos operandos está a <em>1</em>, <em>0</em> en caso contrario.<br />
Exemplos:</p>
<pre>~0x00          <span class="comment"># -1 (0xffffffff)</span>
0x0f | 0xf0    <span class="comment"># 0xff</span>
0x0f % 0xf0    <span class="comment"># 0x0f</span>
0x0f &amp; 0xf0    <span class="comment"># 0x00</span>
0xFF ^ 0xF0    <span class="comment"># 0x0f</span></pre>
<p><strong>Conversión de tipos</strong><a title="conversion" name="conversion"></a></p>
<p>Os tipos numéricos pódense converter dun tipo a outro empregando <em>bool()</em>, <em>int()</em>, <em>long()</em> e <em>float()</em>. <em>bool()</em> converte calquera valor distinto de <em>0</em> a <em>True</em>, <em>False</em> en caso contrario. <em>int()</em> e <em>long()</em> converten o valor a enteiro normal ou longo respectivamente. <em>float()</em> converten o valor a real.<br />
Exemplos:</p>
<pre><span class="py-builtins">bool</span>(23)     <span class="comment"># True</span>
<span class="py-builtins">bool</span>(0.0)    <span class="comment"># False</span>
<span class="py-builtins">int</span>(<span class="py-pseudo-keyword">True</span>)    <span class="comment"># 1</span>
<span class="py-builtins">long</span>(2.5)    <span class="comment"># 2</span>
<span class="py-builtins">float</span>(<span class="py-pseudo-keyword">False</span>) <span class="comment"># 0.0</span>
<span class="py-builtins">float</span>(2)     <span class="comment"># 2.0</span></pre>
<p><strong>Mistura de tipos</strong><a title="mistura" name="mistura"></a></p>
<p>Nunha operación pódense misturar dous distintos tipos de datos numéricos. Ó realiza-la operación mírase cal dos datos é dun tipo máis xenérico e convértese (implicitamente) o outro a ese formato, dando como resultado un valor do deste mesmo tipo.</p>
<p>Debido a que hai tres tipos de datos numéricos, só haberá tres tipos de combinacións posibles. Se operamos un booleado cun enteiro, o booleano convertirase a enteiro e o resultado da operación será enteiro. Se operamos un enteiro cun real, o enteiro convertirase a real e o resultado da operación será real. Se operamos un booleano cun real, o booleano convertirase a real e o resultado da operación será real.</p>
<p>Exemplos:</p>
<pre><span class="py-builtins">type</span>(<span class="py-pseudo-keyword">True</span> + 2) <span class="comment"># &lt;type 'int'&gt;</span>
<span class="py-builtins">type</span>(2 + 2.0)  <span class="comment"># &lt;type 'float'&gt;</span></pre>
<a href='http://chuza.org/submit.php?url= http://python.blogaliza.org/2007/03/26/tipos-de-datos-sinxelos/'><img src="/images/chuza.gif" alt="Chuzame!" title="Chuzame!" /> chuzame</a> - ]]></content:encoded>
			<wfw:commentRss>http://python.blogaliza.org/2007/03/26/tipos-de-datos-sinxelos/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Programación estructurada</title>
		<link>http://python.blogaliza.org/2007/03/26/programacion-estructurada/</link>
		<comments>http://python.blogaliza.org/2007/03/26/programacion-estructurada/#comments</comments>
		<pubDate>Mon, 26 Mar 2007 16:38:55 +0000</pubDate>
		<dc:creator>Xosé Otero</dc:creator>
		
		<category><![CDATA[Teoría]]></category>

		<category><![CDATA[Titorial]]></category>

		<guid isPermaLink="false">http://python.blogaliza.org/2007/03/26/programacion-estructurada/</guid>
		<description><![CDATA[<p>A <a href="http://en.wikipedia.org/wiki/Structured_programming" title="Programación estructurada na wikipedia en inglés">programación estructurada</a> consiste na utilización de tres estructuras básicas: a secuencia, a seleción e a repetición. Con estas tres estructuras pódese realizar calquera tipo de programa, aínda que o código será pouco lexible, difícil de reutilizar e difícil de manter. As linguaxes de programación que permiten este paradigma de programación inclúen outras estructuras de máis alto nivel para mellora-lo nivel de abstración e lexibilidade do código.</p>
<p>Exemplos de linguaxes estructuradas son: <a href="http://gl.wikipedia.org/wiki/Linguaxe_de_programaci%C3%B3n_C" title="C na galipedia">C</a>, <a href="http://es.wikipedia.org/wiki/Modula-3" title="Modula 3 na wikipedia en castelán">Modula 3</a> ou <a href="http://pt.wikipedia.org/wiki/Java_%28linguagem_de_programa%C3%A7%C3%A3o%29" title="Java na wikipedia en portugués">Java</a>.</p>
<p><span id="more-25"></span><strong>Secuencia</strong><a title="secuencia" name="secuencia"></a></p>
<p>A secuencia é a estructura máis básica da programación estructurada. Unha secuencia consiste na execución de varias instrucións seguidas, unha detrás da outra. Estas instrucións poden ser simples ou estar compostas por estructuras máis elaboradas (concatenación de selecións, repeticións ou unha mistura).</p>
<p>Un exemplo de secuencia é o intercambio entre os valores de dúas variables (a e b no exemplo).</p>
<pre>tmp = a
a = b
b = tmp</pre>
<p><strong>Seleción</strong><a title="selecion" name="selecion"></a></p>
<p>A seleción permite executar código de forma condicional. No mundo real, nunca se atopa un programa onde tódalas súas instruccións se executen, senón que dependendo da entrada do programa se tomarán certos camiños dentro do código. A seleción está formada por tres partes: a primeira é a condición, a segunda son as instrucións que se executarán en caso de que se cumpla a condición e a terceira as instrucións que se executarán en caso de que non se cumpla.</p>
<p>Un exemplo de seleción é o cálculo do valor absoluto dun número. Neste exemplo compróbase se o número é maior ou igual que cero, se o é, non hai que modificar este valor, se é menor que cero (se non é maior ou igual que cero) hai que cambiarlle o signo.</p>
<pre>SE <strong>n &gt;= 0</strong>
    <strong>ENTÓN</strong> valor_absoluto = n
    <strong>SENÖN</strong> valor_absoluto = -n
FinSE</pre>
<p><strong>Repetición</strong><a title="repeticion" name="repeticion"></a></p>
<p>A repetición permite executar un bloque de instrucións un número variable, e a miúdo descoñecido, de veces. A repetición está formada por dúas partes: a primeira é a condición de repetición do bucle e a segunda é o bloque de instrucións a executar. O bloque de instrucións estarase a executar mentres que se cumpla a condición de repetición. Un erro frecuente é esquecerse de modificar dalgún xeito os operadores que interveñen na condición de repetición facendo que o programa entre nun bucle infinito.</p>
<p>Un exemplo de repetición é o calculo do primeiros <em>n</em> números enteiros. Neste exemplo, <em>i</em> vai tomando tódolos valores dende <em>1</em> ata <em>n</em> (<em>1 &lt;= i &lt; n</em>).</p>
<pre>total = 0
i = 1
MENTRES <strong><strong>i &lt;= n</strong></strong>
    total = total + i
    i = i + 1
FinMENTRES</pre>
<a href='http://chuza.org/submit.php?url= http://python.blogaliza.org/2007/03/26/programacion-estructurada/'><img src="/images/chuza.gif" alt="Chuzame!" title="Chuzame!" /> chuzame</a> - ]]></description>
			<content:encoded><![CDATA[<p>A <a href="http://en.wikipedia.org/wiki/Structured_programming" title="Programación estructurada na wikipedia en inglés">programación estructurada</a> consiste na utilización de tres estructuras básicas: a secuencia, a seleción e a repetición. Con estas tres estructuras pódese realizar calquera tipo de programa, aínda que o código será pouco lexible, difícil de reutilizar e difícil de manter. As linguaxes de programación que permiten este paradigma de programación inclúen outras estructuras de máis alto nivel para mellora-lo nivel de abstración e lexibilidade do código.</p>
<p>Exemplos de linguaxes estructuradas son: <a href="http://gl.wikipedia.org/wiki/Linguaxe_de_programaci%C3%B3n_C" title="C na galipedia">C</a>, <a href="http://es.wikipedia.org/wiki/Modula-3" title="Modula 3 na wikipedia en castelán">Modula 3</a> ou <a href="http://pt.wikipedia.org/wiki/Java_%28linguagem_de_programa%C3%A7%C3%A3o%29" title="Java na wikipedia en portugués">Java</a>.</p>
<p><span id="more-25"></span><strong>Secuencia</strong><a title="secuencia" name="secuencia"></a></p>
<p>A secuencia é a estructura máis básica da programación estructurada. Unha secuencia consiste na execución de varias instrucións seguidas, unha detrás da outra. Estas instrucións poden ser simples ou estar compostas por estructuras máis elaboradas (concatenación de selecións, repeticións ou unha mistura).</p>
<p>Un exemplo de secuencia é o intercambio entre os valores de dúas variables (a e b no exemplo).</p>
<pre>tmp = a
a = b
b = tmp</pre>
<p><strong>Seleción</strong><a title="selecion" name="selecion"></a></p>
<p>A seleción permite executar código de forma condicional. No mundo real, nunca se atopa un programa onde tódalas súas instruccións se executen, senón que dependendo da entrada do programa se tomarán certos camiños dentro do código. A seleción está formada por tres partes: a primeira é a condición, a segunda son as instrucións que se executarán en caso de que se cumpla a condición e a terceira as instrucións que se executarán en caso de que non se cumpla.</p>
<p>Un exemplo de seleción é o cálculo do valor absoluto dun número. Neste exemplo compróbase se o número é maior ou igual que cero, se o é, non hai que modificar este valor, se é menor que cero (se non é maior ou igual que cero) hai que cambiarlle o signo.</p>
<pre>SE <strong>n &gt;= 0</strong>
    <strong>ENTÓN</strong> valor_absoluto = n
    <strong>SENÖN</strong> valor_absoluto = -n
FinSE</pre>
<p><strong>Repetición</strong><a title="repeticion" name="repeticion"></a></p>
<p>A repetición permite executar un bloque de instrucións un número variable, e a miúdo descoñecido, de veces. A repetición está formada por dúas partes: a primeira é a condición de repetición do bucle e a segunda é o bloque de instrucións a executar. O bloque de instrucións estarase a executar mentres que se cumpla a condición de repetición. Un erro frecuente é esquecerse de modificar dalgún xeito os operadores que interveñen na condición de repetición facendo que o programa entre nun bucle infinito.</p>
<p>Un exemplo de repetición é o calculo do primeiros <em>n</em> números enteiros. Neste exemplo, <em>i</em> vai tomando tódolos valores dende <em>1</em> ata <em>n</em> (<em>1 &lt;= i &lt; n</em>).</p>
<pre>total = 0
i = 1
MENTRES <strong><strong>i &lt;= n</strong></strong>
    total = total + i
    i = i + 1
FinMENTRES</pre>
<a href='http://chuza.org/submit.php?url= http://python.blogaliza.org/2007/03/26/programacion-estructurada/'><img src="/images/chuza.gif" alt="Chuzame!" title="Chuzame!" /> chuzame</a> - ]]></content:encoded>
			<wfw:commentRss>http://python.blogaliza.org/2007/03/26/programacion-estructurada/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Paradigmas de programación</title>
		<link>http://python.blogaliza.org/2007/03/26/paradigmas-de-programacion/</link>
		<comments>http://python.blogaliza.org/2007/03/26/paradigmas-de-programacion/#comments</comments>
		<pubDate>Mon, 26 Mar 2007 16:38:08 +0000</pubDate>
		<dc:creator>Xosé Otero</dc:creator>
		
		<category><![CDATA[Teoría]]></category>

		<category><![CDATA[Titorial]]></category>

		<guid isPermaLink="false">http://python.blogaliza.org/2007/03/26/paradigmas-de-programacion/</guid>
		<description><![CDATA[<p>Os <a href="http://en.wikipedia.org/wiki/Programming_paradigm" title="Paradigmas de programación na wikipedia en inglés">paradigmas de programación</a> son diferentes estilos de programación para resolver un problema. Así, un problema pode ser resolto empregando distintos paradigmas de programación aínda que pode haber paradigmos máis facilmente empregables para algúns problemas.</p>
<p>Á hora de desenvolver unha aplicación empréganse varios paradigmas ó mesmo tempo. É por iso que agás raras excepcións, as linguaxes de programación facilitan o emprego dos paradigmas máis difundidos.</p>
<p>Neste titorial explicaranse os tres paradigmas máis difundidos: a <a href="http://python.blogaliza.org/2007/03/26/programacion-estructurada/">programación estructurada</a>, a <a href="http://python.blogaliza.org/2007/04/03/programacion-funcional/">programación funcional</a> e a <a href="http://python.blogaliza.org/2007/04/03/programacion-orientada-a-obxectos/">programación orientada a obxetos</a>. Outros paradigmas dignos de mención son: a <a href="http://pt.wikipedia.org/wiki/Linguagem_imperativa" title="Programación imperativa na wikipedia en portugués">programación imperativa</a>, a <a href="http://pt.wikipedia.org/wiki/Programa%C3%A7%C3%A3o_orientada_a_aspecto" title="Programación orientada a aspectos na wikipedia en portugués">programación orientada a aspectos</a> ou a <a href="http://pt.wikipedia.org/wiki/Programa%C3%A7%C3%A3o_gen%C3%A9rica" title="Programación xenérica na wikipedia en portugués">programación xenérica</a>.</p>
<a href='http://chuza.org/submit.php?url= http://python.blogaliza.org/2007/03/26/paradigmas-de-programacion/'><img src="/images/chuza.gif" alt="Chuzame!" title="Chuzame!" /> chuzame</a> - ]]></description>
			<content:encoded><![CDATA[<p>Os <a href="http://en.wikipedia.org/wiki/Programming_paradigm" title="Paradigmas de programación na wikipedia en inglés">paradigmas de programación</a> son diferentes estilos de programación para resolver un problema. Así, un problema pode ser resolto empregando distintos paradigmas de programación aínda que pode haber paradigmos máis facilmente empregables para algúns problemas.</p>
<p>Á hora de desenvolver unha aplicación empréganse varios paradigmas ó mesmo tempo. É por iso que agás raras excepcións, as linguaxes de programación facilitan o emprego dos paradigmas máis difundidos.</p>
<p>Neste titorial explicaranse os tres paradigmas máis difundidos: a <a href="http://python.blogaliza.org/2007/03/26/programacion-estructurada/">programación estructurada</a>, a <a href="http://python.blogaliza.org/2007/04/03/programacion-funcional/">programación funcional</a> e a <a href="http://python.blogaliza.org/2007/04/03/programacion-orientada-a-obxectos/">programación orientada a obxetos</a>. Outros paradigmas dignos de mención son: a <a href="http://pt.wikipedia.org/wiki/Linguagem_imperativa" title="Programación imperativa na wikipedia en portugués">programación imperativa</a>, a <a href="http://pt.wikipedia.org/wiki/Programa%C3%A7%C3%A3o_orientada_a_aspecto" title="Programación orientada a aspectos na wikipedia en portugués">programación orientada a aspectos</a> ou a <a href="http://pt.wikipedia.org/wiki/Programa%C3%A7%C3%A3o_gen%C3%A9rica" title="Programación xenérica na wikipedia en portugués">programación xenérica</a>.</p>
<a href='http://chuza.org/submit.php?url= http://python.blogaliza.org/2007/03/26/paradigmas-de-programacion/'><img src="/images/chuza.gif" alt="Chuzame!" title="Chuzame!" /> chuzame</a> - ]]></content:encoded>
			<wfw:commentRss>http://python.blogaliza.org/2007/03/26/paradigmas-de-programacion/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Tipos de linguaxes de programación</title>
		<link>http://python.blogaliza.org/2007/03/25/tipos-de-linguaxes-de-programacion/</link>
		<comments>http://python.blogaliza.org/2007/03/25/tipos-de-linguaxes-de-programacion/#comments</comments>
		<pubDate>Sun, 25 Mar 2007 04:47:11 +0000</pubDate>
		<dc:creator>Xosé Otero</dc:creator>
		
		<category><![CDATA[Teoría]]></category>

		<category><![CDATA[Titorial]]></category>

		<guid isPermaLink="false">http://python.blogaliza.org/2007/03/25/tipos-de-linguaxes-de-programacion/</guid>
		<description><![CDATA[<p>As linguaxes de programación son unha abstración da linguaxe que pode entender a máquina. Coa abstración da linguaxe de programación conséguese unha linguaxe moito máis fácil de entender, e por tanto de manter, co custe de ter que pasar por algún paso intermedio para executa-lo programa.</p>
<p>Segundo o nivel de abstración, temos tres tipos de linguaxes de programación: linguaxe máquina, linguaxes compiladas, linguaxes interpretadas e linguaxes virtualizadas.</p>
<p><span id="more-18"></span><strong>Linguaxe máquina</strong><a title="maquina" name="maquina"></a></p>
<p>A linguaxe máquina ou <a href="http://en.wikipedia.org/wiki/Object_file" title="Código obxeto na wikipedia en inglés">código obxeto</a>, é código entendible directamente pola CPU. Esta linguaxe é de moi baixo nivel e non é entendible directamente por un programador.</p>
<p><img src="http://python.blogaliza.org/files/2007/03/execucion.png" alt="Execución" /></p>
<p><strong>Linguaxes compiladas</strong><a title="compilada" name="compilada"></a></p>
<p>As <a href="http://en.wikipedia.org/wiki/Compiled_language" title="Linguaxe compilada na wikipedia en inglés">linguaxes compiladas</a> precisan dun compilador que converte o código fonte en código obxeto que xa é directamente executable pola máquina. Estas linguaxes permiten un código fácil de escribir, ler e manter.</p>
<p><img src="http://python.blogaliza.org/files/2007/03/compilacion.png" alt="compilación" /></p>
<p>Exemplos deste tipo de linguaxes son <a href="http://gl.wikipedia.org/wiki/Linguaxe_de_programaci%C3%B3n_C" title="C na galipedia">C</a>, <a href="http://en.wikipedia.org/wiki/Eiffel_%28programming_language%29" title="Eiffel na wikipedia en inglés">Eiffel</a> ou <a href="http://gl.wikipedia.org/wiki/Ada" title="Ada na galipedia">Ada</a>.</p>
<p><strong>Linguaxes interpretadas</strong><a title="interpretada" name="interpretada"></a></p>
<p>As <a href="http://en.wikipedia.org/wiki/Interpreted_language" title="Linguaxe interpretada na wikipedia en inglés">linguaxe interpretadas</a> precisan dun intérprete que irá executando o código fonte liña a liña. A existenza do intérprete ten a avantaxe de que acurta o ciclo de codificación-proba e posibilita a realización de código moito máis portable entre distintos tipos de máquinas. A desventaxe é que a execución é máis lenta que no caso de executar código obxeto.</p>
<p><img src="http://python.blogaliza.org/files/2007/03/interpretacion.png" alt="Interpretación" /></p>
<p>Exemplos deste tipo de linguaxes son <a href="http://gl.wikipedia.org/wiki/Python" title="Python na galipedia">Python</a>, <a href="http://pt.wikipedia.org/wiki/Perl" title="Perl na wikipedia en portugués">Perl</a> ou <a href="http://pt.wikipedia.org/wiki/Ruby_%28linguagem_de_programa%C3%A7%C3%A3o%29" title="Ruby na wikipedia en portugués">Ruby</a>.</p>
<p><strong>Linguaxes virtualizadas</strong><a title="virtualizada" name="virtualizada"></a></p>
<p>As linguaxes virtualizadas son unha mistura das dúas anteriores. Nun primeiro paso, precisan ser compiladas a bytecode, un código obxeto para unha máquina virtual, posteriormente, a máquina virtual executa este bytecode.  É un refinamento sobre as linguaxes interpretadas co que se consegue un aumento da velocidade de execución.</p>
<p><img src="http://python.blogaliza.org/files/2007/03/compilacion-interpretacion.png" alt="Bytecode" /></p>
<p>Exemplos deste tipo de linguaxes son <a href="http://pt.wikipedia.org/wiki/Java_%28linguagem_de_programa%C3%A7%C3%A3o%29" title="Java na wikipedia en portugués">Java</a> ou <a href="http://pt.wikipedia.org/wiki/C_Sharp" title="C# na wikipedia en portugués">C#</a>.</p>
<p>Algunhas linguaxes interpretadas tamén fan unha compilación previa á execución, polo que non é sinxelo diferenciar estas linguaxes interpretadas das virtualizadas. A diferenza reside en que nas linguaxes virtualizadas, o bytecode está pensado para poder ser distribuído coma o executable das linguaxes compiladas, mentres que no caso das linguaxes interpretadas este código intermedio é só unha forma de axiliza-lo proceso de verificación e execución do código fonte. Un exemplo de linguaxe interpretada que ten unha máquina virtual é python.</p>
<a href='http://chuza.org/submit.php?url= http://python.blogaliza.org/2007/03/25/tipos-de-linguaxes-de-programacion/'><img src="/images/chuza.gif" alt="Chuzame!" title="Chuzame!" /> chuzame</a> - ]]></description>
			<content:encoded><![CDATA[<p>As linguaxes de programación son unha abstración da linguaxe que pode entender a máquina. Coa abstración da linguaxe de programación conséguese unha linguaxe moito máis fácil de entender, e por tanto de manter, co custe de ter que pasar por algún paso intermedio para executa-lo programa.</p>
<p>Segundo o nivel de abstración, temos tres tipos de linguaxes de programación: linguaxe máquina, linguaxes compiladas, linguaxes interpretadas e linguaxes virtualizadas.</p>
<p><span id="more-18"></span><strong>Linguaxe máquina</strong><a title="maquina" name="maquina"></a></p>
<p>A linguaxe máquina ou <a href="http://en.wikipedia.org/wiki/Object_file" title="Código obxeto na wikipedia en inglés">código obxeto</a>, é código entendible directamente pola CPU. Esta linguaxe é de moi baixo nivel e non é entendible directamente por un programador.</p>
<p><img src="http://python.blogaliza.org/files/2007/03/execucion.png" alt="Execución" /></p>
<p><strong>Linguaxes compiladas</strong><a title="compilada" name="compilada"></a></p>
<p>As <a href="http://en.wikipedia.org/wiki/Compiled_language" title="Linguaxe compilada na wikipedia en inglés">linguaxes compiladas</a> precisan dun compilador que converte o código fonte en código obxeto que xa é directamente executable pola máquina. Estas linguaxes permiten un código fácil de escribir, ler e manter.</p>
<p><img src="http://python.blogaliza.org/files/2007/03/compilacion.png" alt="compilación" /></p>
<p>Exemplos deste tipo de linguaxes son <a href="http://gl.wikipedia.org/wiki/Linguaxe_de_programaci%C3%B3n_C" title="C na galipedia">C</a>, <a href="http://en.wikipedia.org/wiki/Eiffel_%28programming_language%29" title="Eiffel na wikipedia en inglés">Eiffel</a> ou <a href="http://gl.wikipedia.org/wiki/Ada" title="Ada na galipedia">Ada</a>.</p>
<p><strong>Linguaxes interpretadas</strong><a title="interpretada" name="interpretada"></a></p>
<p>As <a href="http://en.wikipedia.org/wiki/Interpreted_language" title="Linguaxe interpretada na wikipedia en inglés">linguaxe interpretadas</a> precisan dun intérprete que irá executando o código fonte liña a liña. A existenza do intérprete ten a avantaxe de que acurta o ciclo de codificación-proba e posibilita a realización de código moito máis portable entre distintos tipos de máquinas. A desventaxe é que a execución é máis lenta que no caso de executar código obxeto.</p>
<p><img src="http://python.blogaliza.org/files/2007/03/interpretacion.png" alt="Interpretación" /></p>
<p>Exemplos deste tipo de linguaxes son <a href="http://gl.wikipedia.org/wiki/Python" title="Python na galipedia">Python</a>, <a href="http://pt.wikipedia.org/wiki/Perl" title="Perl na wikipedia en portugués">Perl</a> ou <a href="http://pt.wikipedia.org/wiki/Ruby_%28linguagem_de_programa%C3%A7%C3%A3o%29" title="Ruby na wikipedia en portugués">Ruby</a>.</p>
<p><strong>Linguaxes virtualizadas</strong><a title="virtualizada" name="virtualizada"></a></p>
<p>As linguaxes virtualizadas son unha mistura das dúas anteriores. Nun primeiro paso, precisan ser compiladas a bytecode, un código obxeto para unha máquina virtual, posteriormente, a máquina virtual executa este bytecode.  É un refinamento sobre as linguaxes interpretadas co que se consegue un aumento da velocidade de execución.</p>
<p><img src="http://python.blogaliza.org/files/2007/03/compilacion-interpretacion.png" alt="Bytecode" /></p>
<p>Exemplos deste tipo de linguaxes son <a href="http://pt.wikipedia.org/wiki/Java_%28linguagem_de_programa%C3%A7%C3%A3o%29" title="Java na wikipedia en portugués">Java</a> ou <a href="http://pt.wikipedia.org/wiki/C_Sharp" title="C# na wikipedia en portugués">C#</a>.</p>
<p>Algunhas linguaxes interpretadas tamén fan unha compilación previa á execución, polo que non é sinxelo diferenciar estas linguaxes interpretadas das virtualizadas. A diferenza reside en que nas linguaxes virtualizadas, o bytecode está pensado para poder ser distribuído coma o executable das linguaxes compiladas, mentres que no caso das linguaxes interpretadas este código intermedio é só unha forma de axiliza-lo proceso de verificación e execución do código fonte. Un exemplo de linguaxe interpretada que ten unha máquina virtual é python.</p>
<a href='http://chuza.org/submit.php?url= http://python.blogaliza.org/2007/03/25/tipos-de-linguaxes-de-programacion/'><img src="/images/chuza.gif" alt="Chuzame!" title="Chuzame!" /> chuzame</a> - ]]></content:encoded>
			<wfw:commentRss>http://python.blogaliza.org/2007/03/25/tipos-de-linguaxes-de-programacion/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
