

<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Herança não funciona</title>
	<atom:link href="http://www.kumpera.net/blog/index.php/2007/11/13/heranca-nao-funciona/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.kumpera.net/blog/index.php/2007/11/13/heranca-nao-funciona/</link>
	<description>Meus achados sobre tecnologia</description>
	<lastBuildDate>Wed, 16 Jun 2010 18:47:13 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Herança não funciona, parte III &#124; Rodrigo Kumpera Weblog</title>
		<link>http://www.kumpera.net/blog/index.php/2007/11/13/heranca-nao-funciona/comment-page-1/#comment-68889</link>
		<dc:creator>Herança não funciona, parte III &#124; Rodrigo Kumpera Weblog</dc:creator>
		<pubDate>Mon, 01 Dec 2008 14:35:20 +0000</pubDate>
		<guid isPermaLink="false">http://www.kumpera.net/blog/index.php/2007/11/13/heranca-nao-funciona/#comment-68889</guid>
		<description>[...] artigos anteriores eu descrevi algum dos problemas associados com herança, ou subtipagem, e questões [...]</description>
		<content:encoded><![CDATA[<p>[...] artigos anteriores eu descrevi algum dos problemas associados com herança, ou subtipagem, e questões [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Herança não funciona, parte 2 &#124; Kumpera.net delírios sobre linguagens de programação</title>
		<link>http://www.kumpera.net/blog/index.php/2007/11/13/heranca-nao-funciona/comment-page-1/#comment-43238</link>
		<dc:creator>Herança não funciona, parte 2 &#124; Kumpera.net delírios sobre linguagens de programação</dc:creator>
		<pubDate>Mon, 31 Dec 2007 04:27:45 +0000</pubDate>
		<guid isPermaLink="false">http://www.kumpera.net/blog/index.php/2007/11/13/heranca-nao-funciona/#comment-43238</guid>
		<description>[...] escrevi anteriormente que herança não funciona meu objetivo não era realmente provar isso, mas atentar ao fato de que [...]</description>
		<content:encoded><![CDATA[<p>[...] escrevi anteriormente que herança não funciona meu objetivo não era realmente provar isso, mas atentar ao fato de que [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: problemas da herança &#171; TJRN Developers</title>
		<link>http://www.kumpera.net/blog/index.php/2007/11/13/heranca-nao-funciona/comment-page-1/#comment-40645</link>
		<dc:creator>problemas da herança &#171; TJRN Developers</dc:creator>
		<pubDate>Fri, 07 Dec 2007 12:10:29 +0000</pubDate>
		<guid isPermaLink="false">http://www.kumpera.net/blog/index.php/2007/11/13/heranca-nao-funciona/#comment-40645</guid>
		<description>[...] post desse blog aborda sobre [...]</description>
		<content:encoded><![CDATA[<p>[...] post desse blog aborda sobre [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: kumpera</title>
		<link>http://www.kumpera.net/blog/index.php/2007/11/13/heranca-nao-funciona/comment-page-1/#comment-39036</link>
		<dc:creator>kumpera</dc:creator>
		<pubDate>Sat, 24 Nov 2007 19:27:08 +0000</pubDate>
		<guid isPermaLink="false">http://www.kumpera.net/blog/index.php/2007/11/13/heranca-nao-funciona/#comment-39036</guid>
		<description>Marcos, classes abertas são uma limitada de meta-programação, pretendo escrever sobre isso em um artigo futuro.

Andrei, a interpretação de &quot;type soundness&quot; esta relacionada a correta preservação e dos tipos mediante a qualquer operação, porem não deixa de ser importante possuir um termo curto para descreve-la, ou do contrario teríamos textos de demasia dificuldade de leitura.

Mutabilidade definitivamente entra em conflito com herança. Pessoalmente, fico com mutabilidade, mesmo em vista de todas as facilidades advindo dela. Herança pode ser substituída por composição e anotação explicita de variância no caso de variáveis de referencia, tuplas ou arrays - por sinal, tuplas mutáveis são uma coisa meio bizarra.</description>
		<content:encoded><![CDATA[<p>Marcos, classes abertas são uma limitada de meta-programação, pretendo escrever sobre isso em um artigo futuro.</p>
<p>Andrei, a interpretação de &#8220;type soundness&#8221; esta relacionada a correta preservação e dos tipos mediante a qualquer operação, porem não deixa de ser importante possuir um termo curto para descreve-la, ou do contrario teríamos textos de demasia dificuldade de leitura.</p>
<p>Mutabilidade definitivamente entra em conflito com herança. Pessoalmente, fico com mutabilidade, mesmo em vista de todas as facilidades advindo dela. Herança pode ser substituída por composição e anotação explicita de variância no caso de variáveis de referencia, tuplas ou arrays &#8211; por sinal, tuplas mutáveis são uma coisa meio bizarra.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Andrei</title>
		<link>http://www.kumpera.net/blog/index.php/2007/11/13/heranca-nao-funciona/comment-page-1/#comment-38673</link>
		<dc:creator>Andrei</dc:creator>
		<pubDate>Thu, 22 Nov 2007 05:23:28 +0000</pubDate>
		<guid isPermaLink="false">http://www.kumpera.net/blog/index.php/2007/11/13/heranca-nao-funciona/#comment-38673</guid>
		<description>Ah, faltou uma coisa: sobre os problemas teóricos de variância mencionados no post, eles são causados pela combinação da herança com outras características das linguagens OO, como mutabilidade de variáveis. Então em resumo teria duas soluções: remove a mutabilidade de variáveis ou remove a herança. Claro que para quem programa em linguagens OO é provavelmente mais simples tirar a herança do que a mutabilidade, mas não é necessariamente a herança que é a raiz do problema. 

No capítulo sobre sub-tipos do TAPL ele formaliza arrays só para leitura e só para escrita que são corretas com relação à variância. Se isso seria utilizável em uma linguagem real, não sei. O interessante é que marcar uma variável como mutável (como acontece na família ML) poderia ter outros usos também. Mas isso já são questões de language design, divago.</description>
		<content:encoded><![CDATA[<p>Ah, faltou uma coisa: sobre os problemas teóricos de variância mencionados no post, eles são causados pela combinação da herança com outras características das linguagens OO, como mutabilidade de variáveis. Então em resumo teria duas soluções: remove a mutabilidade de variáveis ou remove a herança. Claro que para quem programa em linguagens OO é provavelmente mais simples tirar a herança do que a mutabilidade, mas não é necessariamente a herança que é a raiz do problema. </p>
<p>No capítulo sobre sub-tipos do TAPL ele formaliza arrays só para leitura e só para escrita que são corretas com relação à variância. Se isso seria utilizável em uma linguagem real, não sei. O interessante é que marcar uma variável como mutável (como acontece na família ML) poderia ter outros usos também. Mas isso já são questões de language design, divago.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Andrei</title>
		<link>http://www.kumpera.net/blog/index.php/2007/11/13/heranca-nao-funciona/comment-page-1/#comment-38668</link>
		<dc:creator>Andrei</dc:creator>
		<pubDate>Thu, 22 Nov 2007 05:03:09 +0000</pubDate>
		<guid isPermaLink="false">http://www.kumpera.net/blog/index.php/2007/11/13/heranca-nao-funciona/#comment-38668</guid>
		<description>Quanto a uma tradução para &quot;type soundness&quot;, eu não sei. Vi um dia desses em francês, uma &quot;proof of type soundness&quot; é &quot;preuve de preservation de types&quot;, que captura bem a idéia. Uma prova de type soundness é uma garantia que os tipos são preservados em cada passo da avaliação dos termos, não? (sendo que a &quot;preservação&quot; inclui a idéia de subsumption -- tb não sei como traduzir -- de sistemas com sub-tipos). 

Sobre herança não funcionar, talvez seja um pouco extremo, mas certamente a herança sempre foi superestimada. Hoje em dia conselhos como &quot;prefira composição ao invés de herança&quot; são comuns, e pra mim é difícil achar bom um projeto com hierarquias profundas. Acredito que em alguns domínios a herança seja bem útil, embora seja possível se virar sem ela. Bem, eu tenho programado quase que exclusivamente em linguagens funcionais nos últimos tempos, e não sinto falta de nada OO. Já quando eu uso uma linguagem OO, por outro lado...

E adicione outra dificuldade causada por sistemas com subtipos: a inferência global de tipos fica indecidível. É por isso que Scala, por exemplo, usa inferência de tipos local, e é o mesmo motivo que ninguém conseguiu integrar muito bem subtipos com o sistema Hindley-Milner, até hoje. As type classes em Haskell são bem legais e podem simular herança de interfaces, mas não cria problemas de variância -- e, mesmo assim, torna a inferência indecidível em geral, requerendo um maior uso de anotações de tipos no código. Eu acho interessante que, em ML (OCaml, SML) é muito raro ver código com anotações de tipos explícitas, enquanto que em Haskell isso é bem comum. Um dos motivos são as type classes.</description>
		<content:encoded><![CDATA[<p>Quanto a uma tradução para &#8220;type soundness&#8221;, eu não sei. Vi um dia desses em francês, uma &#8220;proof of type soundness&#8221; é &#8220;preuve de preservation de types&#8221;, que captura bem a idéia. Uma prova de type soundness é uma garantia que os tipos são preservados em cada passo da avaliação dos termos, não? (sendo que a &#8220;preservação&#8221; inclui a idéia de subsumption &#8212; tb não sei como traduzir &#8212; de sistemas com sub-tipos). </p>
<p>Sobre herança não funcionar, talvez seja um pouco extremo, mas certamente a herança sempre foi superestimada. Hoje em dia conselhos como &#8220;prefira composição ao invés de herança&#8221; são comuns, e pra mim é difícil achar bom um projeto com hierarquias profundas. Acredito que em alguns domínios a herança seja bem útil, embora seja possível se virar sem ela. Bem, eu tenho programado quase que exclusivamente em linguagens funcionais nos últimos tempos, e não sinto falta de nada OO. Já quando eu uso uma linguagem OO, por outro lado&#8230;</p>
<p>E adicione outra dificuldade causada por sistemas com subtipos: a inferência global de tipos fica indecidível. É por isso que Scala, por exemplo, usa inferência de tipos local, e é o mesmo motivo que ninguém conseguiu integrar muito bem subtipos com o sistema Hindley-Milner, até hoje. As type classes em Haskell são bem legais e podem simular herança de interfaces, mas não cria problemas de variância &#8212; e, mesmo assim, torna a inferência indecidível em geral, requerendo um maior uso de anotações de tipos no código. Eu acho interessante que, em ML (OCaml, SML) é muito raro ver código com anotações de tipos explícitas, enquanto que em Haskell isso é bem comum. Um dos motivos são as type classes.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Christiano Milfont</title>
		<link>http://www.kumpera.net/blog/index.php/2007/11/13/heranca-nao-funciona/comment-page-1/#comment-38572</link>
		<dc:creator>Christiano Milfont</dc:creator>
		<pubDate>Wed, 21 Nov 2007 12:15:16 +0000</pubDate>
		<guid isPermaLink="false">http://www.kumpera.net/blog/index.php/2007/11/13/heranca-nao-funciona/#comment-38572</guid>
		<description>Isso, e quanto ao prototype-based OO?
No javascript vários frameworks implementaram facilmente a herança múltipla pelas características da linguagem.
Louds, e qual seria a melhor alternativa para substituir a herança? Exemplo prático, tenho uma classe Documento em um sistema onde extendo para suas especializações como por exemplo RequisicaoVeiculo, que tem propriedades distintas a esse tipo de documento. Seria uma abordagem de composição melhor do que Herança nesse caso?</description>
		<content:encoded><![CDATA[<p>Isso, e quanto ao prototype-based OO?<br />
No javascript vários frameworks implementaram facilmente a herança múltipla pelas características da linguagem.<br />
Louds, e qual seria a melhor alternativa para substituir a herança? Exemplo prático, tenho uma classe Documento em um sistema onde extendo para suas especializações como por exemplo RequisicaoVeiculo, que tem propriedades distintas a esse tipo de documento. Seria uma abordagem de composição melhor do que Herança nesse caso?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Marcos Silva Pereira</title>
		<link>http://www.kumpera.net/blog/index.php/2007/11/13/heranca-nao-funciona/comment-page-1/#comment-38334</link>
		<dc:creator>Marcos Silva Pereira</dc:creator>
		<pubDate>Tue, 20 Nov 2007 02:06:03 +0000</pubDate>
		<guid isPermaLink="false">http://www.kumpera.net/blog/index.php/2007/11/13/heranca-nao-funciona/#comment-38334</guid>
		<description>Rodrigo, classes abertas não são uma maneira de implementar um sistema de meta-classes? Ou vc fala de algo como o MOP de Groovy (onde há &quot;class&quot; e &quot;metaclass&quot;)?

E mais, o que vc acha de protótipos como alternativa?

valeuz...</description>
		<content:encoded><![CDATA[<p>Rodrigo, classes abertas não são uma maneira de implementar um sistema de meta-classes? Ou vc fala de algo como o MOP de Groovy (onde há &#8220;class&#8221; e &#8220;metaclass&#8221;)?</p>
<p>E mais, o que vc acha de protótipos como alternativa?</p>
<p>valeuz&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Proteu Alcebidiano</title>
		<link>http://www.kumpera.net/blog/index.php/2007/11/13/heranca-nao-funciona/comment-page-1/#comment-38186</link>
		<dc:creator>Proteu Alcebidiano</dc:creator>
		<pubDate>Mon, 19 Nov 2007 02:28:53 +0000</pubDate>
		<guid isPermaLink="false">http://www.kumpera.net/blog/index.php/2007/11/13/heranca-nao-funciona/#comment-38186</guid>
		<description>Rodrigo, outra coisa que me fez lembrar indiretamente de sua postagem mais recente:

http://www.infoq.com/news/2007/11/qi4j-intro

T+</description>
		<content:encoded><![CDATA[<p>Rodrigo, outra coisa que me fez lembrar indiretamente de sua postagem mais recente:</p>
<p><a href="http://www.infoq.com/news/2007/11/qi4j-intro" rel="nofollow">http://www.infoq.com/news/2007/11/qi4j-intro</a></p>
<p>T+</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: kumpera</title>
		<link>http://www.kumpera.net/blog/index.php/2007/11/13/heranca-nao-funciona/comment-page-1/#comment-37792</link>
		<dc:creator>kumpera</dc:creator>
		<pubDate>Fri, 16 Nov 2007 11:41:24 +0000</pubDate>
		<guid isPermaLink="false">http://www.kumpera.net/blog/index.php/2007/11/13/heranca-nao-funciona/#comment-37792</guid>
		<description>Proteu, open classes do ruby são uma ótima solução, mas eu acredito que é um recurso desnecessário na presença de um bom sistema de meta-classes.</description>
		<content:encoded><![CDATA[<p>Proteu, open classes do ruby são uma ótima solução, mas eu acredito que é um recurso desnecessário na presença de um bom sistema de meta-classes.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
