Skip to content

Commit

Permalink
fix txt
Browse files Browse the repository at this point in the history
  • Loading branch information
scovl committed Jul 19, 2024
1 parent 885b2a1 commit 100cca4
Show file tree
Hide file tree
Showing 6 changed files with 80 additions and 17 deletions.
28 changes: 25 additions & 3 deletions blog/content/post/oop.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,15 @@ weight = 4


## Table of Contents
1. [Introdução](#introducao)
1. [Introdução](#introdução)
2. [Descobrindo Clojure: Uma Ponte entre Lisp e Java](#descobrindo-clojure-uma-ponte-entre-lisp-e-java)
3. [Manutenibilidade](#manutenibilidade)
4. [Transparência referencial](#transparência-referencial)
5. [Problemas de Reutilização](#problemas-de-reutilização)
6. [Pattern Null Object](#pattern-null-object)
7. [Pattern Singleton](#pattern-singleton)
8. [Pattern Observer](#pattern-observer)


9. [Recomendações](#recomendações)

# Introdução

Expand Down Expand Up @@ -445,3 +444,26 @@ A comparação entre Java e Clojure é relevante porque ambos operam na Java Vir
Outras linguagens funcionais, como Elixir e Haskell, também poderiam ser comparadas a Java. Elixir, rodando na Erlang VM, é conhecida por sua capacidade de lidar com high availability distributed systems. Haskell é elogiada por seu strong type system e lazy evaluation, minimizando bugs e maximizando a eficiência em algoritmos complexos. No entanto, essas comparações introduziriam variáveis adicionais devido às diferenças nas virtual machines e execution models, complicando a análise dos paradigmas de programação.

Explorar Clojure ou outras linguagens funcionais pode melhorar suas habilidades de programação e oferecer novas ferramentas para resolver problemas de maneiras inovadoras. Aprender novos paradigmas expande sua capacidade de escolher a ferramenta certa para cada trabalho, abrindo novos caminhos para soluções criativas. Embora desafiador, experimentar algo novo proporciona crescimento profissional e satisfação na resolução de problemas.

---

# Recomendações

Se você está interessado em aprofundar seu conhecimento, aqui estão alguns livros que recomendo. São eles:

* **["Clojure Programming"](https://www.amazon.com/Clojure-Programming-Chas-Emerick/dp/1449394701) por Chas Emerick, Brian Carper, e Christophe Grand**
- Este livro é uma introdução completa ao mundo do Clojure, abordando desde conceitos básicos até tópicos avançados como programação concorrente e interoperabilidade com Java.
* **["Java Concurrency in Practice"](https://www.amazon.com/Java-Concurrency-Practice-Brian-Goetz/dp/0321349601) por Brian Goetz**
- Fundamental para entender a gestão de concorrência em Java, este livro oferece diretrizes práticas para escrever programas seguros e com alta performance.
* **["Programming Clojure"](https://www.amazon.com.br/Programming-Clojure-3e-Alex-Miller/dp/1680502468) por Alex Miller e Stuart Halloway**
- Adequado para iniciantes e programadores experientes que querem aprender Clojure, o livro detalha a sintaxe, as estruturas de dados e o estilo funcional de programação.
* **["Effective Java"](https://www.amazon.com/Effective-Java-Joshua-Bloch/dp/0134685997) por Joshua Bloch**
- Essencial para qualquer desenvolvedor Java, aborda práticas recomendadas acumuladas durante anos de experiência na Sun Microsystems.
* **["The Joy of Clojure"](https://www.amazon.com/Joy-Clojure-Michael-Fogus/dp/1617291412) por Michael Fogus e Chris Houser**
- Ideal para quem já tem experiência com Clojure e deseja explorar os aspectos filosóficos e menos pragmáticos da linguagem.
* **["Java Performance: The Definitive Guide"](https://www.amazon.com/Java-Performance-Definitive-Scott-Oaks/dp/1449358454) por Scott Oaks**
- Um guia crucial para desenvolvedores que precisam otimizar aplicações Java, focando em ferramentas de monitoramento e técnicas de melhoria de performance.
* **["Land of Lisp: Learn to Program in Lisp, One Game at a Time!"](https://www.amazon.com/Land-Lisp-Learn-Program-Game/dp/1593272812) por Conrad Barski**
- Este livro é uma introdução divertida e acessível ao Lisp através do desenvolvimento de jogos. Ele ensina a programar em Lisp e desenvolver seus próprios jogos, o que torna o aprendizado interativo e prazeroso.
* **["Practical Common Lisp"](https://www.amazon.com/Practical-Common-Peter-Seibel/dp/1590592395) por Peter Seibel**
- Um guia prático que detalha o uso do Common Lisp na programação do dia a dia, oferecendo uma ótima introdução à linguagem e mostrando como ela pode ser usada para resolver problemas reais.
61 changes: 51 additions & 10 deletions blog/public/2024/07/18/oop/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -114,14 +114,15 @@ <h1 class="post-title" itemprop="name headline">Java e Clojure</h1>

<h2 id="table-of-contents">Table of Contents</h2>
<ol>
<li><a href="/2024/07/18/oop/#introducao">Introdução</a></li>
<li><a href="/2024/07/18/oop/#introdução">Introdução</a></li>
<li><a href="/2024/07/18/oop/#descobrindo-clojure-uma-ponte-entre-lisp-e-java">Descobrindo Clojure: Uma Ponte entre Lisp e Java</a></li>
<li><a href="/2024/07/18/oop/#manutenibilidade">Manutenibilidade</a></li>
<li><a href="/2024/07/18/oop/#transparência-referencial">Transparência referencial</a></li>
<li><a href="/2024/07/18/oop/#problemas-de-reutilização">Problemas de Reutilização</a></li>
<li><a href="/2024/07/18/oop/#pattern-null-object">Pattern Null Object</a></li>
<li><a href="/2024/07/18/oop/#pattern-singleton">Pattern Singleton</a></li>
<li><a href="/2024/07/18/oop/#pattern-observer">Pattern Observer</a></li>
<li><a href="/2024/07/18/oop/#recomendações">Recomendações</a></li>
</ol>
<h1 id="introdução">Introdução</h1>
<p>Ao estudar diferentes linguagens de programação, fui atraído pela família Lisp devido à sua simplicidade e poder. Lisp, criado por <a href="https://www.britannica.com/biography/John-McCarthy">John McCarthy</a> em 1958, é conhecido pela notação de código como listas de dados e pela capacidade de manipular código como uma estrutura de dados. Emacs Lisp e Common Lisp são dois dos muitos dialetos que evoluíram a partir do Lisp original, cada um com suas próprias peculiaridades e casos de uso. Mas o que torna o Lisp tão atraente em comparação com linguagens mais modernas?</p>
Expand Down Expand Up @@ -367,9 +368,7 @@ <h1 id="problemas-de-reutilização">Problemas de Reutilização</h1>
</span></span></span><span class="line"><span class="ln">29</span><span class="cl"><span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="s">&#34;Flying in the sky.&#34;</span><span class="p">);</span><span class="w">
</span></span></span><span class="line"><span class="ln">30</span><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="ln">31</span><span class="cl"><span class="w"></span><span class="p">}</span><span class="w">
</span></span></span></code></pre></div><p>Entendi o problema. Vou focar apenas na remoção de redundâncias, mantendo o texto o mais próximo possível do original.</p>
<hr>
<p>A classe <code>Animal</code> define métodos <code>breathe</code> e <code>eat</code> que todas as subclasses são forçadas a herdar. Isso pode não ser ideal para todos os tipos de animais, como os que possuem métodos de respiração ou alimentação únicos, exigindo que essas subclasses sobrescrevam esses métodos para comportamentos específicos. Todas as subclasses de <code>Animal</code> estão ligadas às implementações de <code>breathe</code> e <code>eat</code> da superclasse.</p>
</span></span></span></code></pre></div><p>A classe <code>Animal</code> define métodos <code>breathe</code> e <code>eat</code> que todas as subclasses são forçadas a herdar. Isso pode não ser ideal para todos os tipos de animais, como os que possuem métodos de respiração ou alimentação únicos, exigindo que essas subclasses sobrescrevam esses métodos para comportamentos específicos. Todas as subclasses de <code>Animal</code> estão ligadas às implementações de <code>breathe</code> e <code>eat</code> da superclasse.</p>
<p>Qualquer mudança nos métodos da classe <code>Animal</code> pode ter efeitos colaterais em <code>Fish</code>, <code>Bird</code> e outras subclasses. Por exemplo, se adicionarmos um método <code>sleep</code> na classe <code>Animal</code> que define como os animais dormem, todas as subclasses terão esse método, mesmo que a maneira de dormir varie entre diferentes tipos de animais, ou mesmo não seja relevante para todos.</p>
<p>Este exemplo ilustra como a herança em Java pode introduzir rigidez e acoplamento entre classes. A herança obriga as subclasses a aderirem à interface e ao comportamento da superclasse, o que pode não ser desejável e pode limitar a flexibilidade do design. Mudanças na superclasse podem afetar todas as subclasses de maneiras não previstas, tornando o sistema mais difícil de manter e evoluir. A composição, em vez de herança, é frequentemente recomendada para mitigar esses problemas, permitindo maior flexibilidade e reduzindo o acoplamento indesejado.</p>
<p>Em contraste, Clojure favorece uma abordagem de composição funcional, onde a reutilização do código é alcançada combinando funções menores e mais genéricas. Essa abordagem reduz o acoplamento e aumenta a flexibilidade, permitindo que os desenvolvedores construam novas funcionalidades de maneira mais previsível e segura.</p>
Expand Down Expand Up @@ -435,12 +434,54 @@ <h1 id="pattern-observer">Pattern Observer</h1>
</span></span></span><span class="line"><span class="ln">17</span><span class="cl"><span class="w"></span><span class="p">}</span><span class="w">
</span></span></span></code></pre></div><p>O pattern <code>observer</code> em Java frequentemente leva a componentes fortemente acoplados e gerenciamento de eventos complexo. Essa complexidade pode tornar o sistema mais difícil de manter e estender, especialmente à medida que o número de observadores cresce&hellip;</p>
<hr>
<p>Por fim, a comparação entre Java e Clojure é relevante porque ambos operam na Java Virtual Machine (JVM). Essa proximidade tecnológica permite explorar como diferentes paradigmas de programação — orientada a objetos e funcional — podem ser implementados em um mesmo ambiente de runtime, proporcionando uma comparação direta das características e vantagens de cada linguagem sob as mesmas condições de infraestrutura.</p>
<p>Java, sendo uma das linguagens mais utilizadas e com um vasto ecossistema, exemplifica o paradigma orientado a objetos, enquanto Clojure, também rodando na JVM, oferece uma abordagem funcional.</p>
<p>A utilização da JVM por ambas as linguagens garante que qualquer comparação seja focada nas linguagens e seus paradigmas, em vez de variáveis externas como diferenças no desempenho do sistema operacional ou do ambiente de execução. Isso torna as discussões sobre performance, manutenção e design de código mais claras e fundamentadas, já que ambas as linguagens podem aproveitar as otimizações e características de performance da JVM, como gerenciamento de memória e coleta de lixo.</p>
<p>Outras linguagens funcionais que não operam na JVM, como Elixir e Haskell, também poderiam ser comparadas a Java. Elixir, que roda na Erlang VM, é conhecida por sua capacidade de lidar com sistemas distribuídos de alta disponibilidade, enquanto Haskell é frequentemente elogiada por seu sistema de tipos rigoroso e avaliação preguiçosa, minimizando bugs e maximizando a eficiência em termos de execução de algoritmos complexos. No entanto, essas comparações introduziriam variáveis adicionais relacionadas às diferenças nas máquinas virtuais e modelos de execução, complicando a análise direta dos paradigmas de programação.</p>
<p>Encorajo todos os desenvolvedores a experimentar Clojure ou outra linguagem funcional. Explorar essas linguagens pode não apenas melhorar suas habilidades de programação, mas também oferecer novas ferramentas para resolver problemas de maneiras que antes não pareciam possíveis.</p>
<p>A aprendizagem e adaptação a novos paradigmas não apenas enriquecem o seu conhecimento, mas também expandem sua capacidade de escolher a ferramenta certa para o trabalho certo, abrindo novos caminhos para soluções criativas. Experimentar algo novo pode ser desafiador, mas as recompensas em termos de crescimento profissional e satisfação na resolução de problemas são imensuráveis.</p>
<p>A comparação entre Java e Clojure é relevante porque ambos operam na Java Virtual Machine (JVM). Isso permite analisar diretamente as características dos paradigmas de programação orientada a objetos e funcional. Java, com seu vasto ecossistema, exemplifica a orientação a objetos, enquanto Clojure oferece uma abordagem funcional. A utilização da JVM garante que a comparação se concentre nas diferenças paradigmáticas, sem interferências externas, tornando as discussões sobre performance, manutenção e design de código mais claras e fundamentadas.</p>
<p>Outras linguagens funcionais, como Elixir e Haskell, também poderiam ser comparadas a Java. Elixir, rodando na Erlang VM, é conhecida por sua capacidade de lidar com high availability distributed systems. Haskell é elogiada por seu strong type system e lazy evaluation, minimizando bugs e maximizando a eficiência em algoritmos complexos. No entanto, essas comparações introduziriam variáveis adicionais devido às diferenças nas virtual machines e execution models, complicando a análise dos paradigmas de programação.</p>
<p>Explorar Clojure ou outras linguagens funcionais pode melhorar suas habilidades de programação e oferecer novas ferramentas para resolver problemas de maneiras inovadoras. Aprender novos paradigmas expande sua capacidade de escolher a ferramenta certa para cada trabalho, abrindo novos caminhos para soluções criativas. Embora desafiador, experimentar algo novo proporciona crescimento profissional e satisfação na resolução de problemas.</p>
<hr>
<h1 id="recomendações">Recomendações</h1>
<p>Se você está interessado em aprofundar seu conhecimento, aqui estão alguns livros que recomendo. São eles:</p>
<ul>
<li><strong><a href="https://www.amazon.com/Clojure-Programming-Chas-Emerick/dp/1449394701">&ldquo;Clojure Programming&rdquo;</a> por Chas Emerick, Brian Carper, e Christophe Grand</strong>
<ul>
<li>Este livro é uma introdução completa ao mundo do Clojure, abordando desde conceitos básicos até tópicos avançados como programação concorrente e interoperabilidade com Java.</li>
</ul>
</li>
<li><strong><a href="https://www.amazon.com/Java-Concurrency-Practice-Brian-Goetz/dp/0321349601">&ldquo;Java Concurrency in Practice&rdquo;</a> por Brian Goetz</strong>
<ul>
<li>Fundamental para entender a gestão de concorrência em Java, este livro oferece diretrizes práticas para escrever programas seguros e com alta performance.</li>
</ul>
</li>
<li><strong><a href="https://www.amazon.com.br/Programming-Clojure-3e-Alex-Miller/dp/1680502468">&ldquo;Programming Clojure&rdquo;</a> por Alex Miller e Stuart Halloway</strong>
<ul>
<li>Adequado para iniciantes e programadores experientes que querem aprender Clojure, o livro detalha a sintaxe, as estruturas de dados e o estilo funcional de programação.</li>
</ul>
</li>
<li><strong><a href="https://www.amazon.com/Effective-Java-Joshua-Bloch/dp/0134685997">&ldquo;Effective Java&rdquo;</a> por Joshua Bloch</strong>
<ul>
<li>Essencial para qualquer desenvolvedor Java, aborda práticas recomendadas acumuladas durante anos de experiência na Sun Microsystems.</li>
</ul>
</li>
<li><strong><a href="https://www.amazon.com/Joy-Clojure-Michael-Fogus/dp/1617291412">&ldquo;The Joy of Clojure&rdquo;</a> por Michael Fogus e Chris Houser</strong>
<ul>
<li>Ideal para quem já tem experiência com Clojure e deseja explorar os aspectos filosóficos e menos pragmáticos da linguagem.</li>
</ul>
</li>
<li><strong><a href="https://www.amazon.com/Java-Performance-Definitive-Scott-Oaks/dp/1449358454">&ldquo;Java Performance: The Definitive Guide&rdquo;</a> por Scott Oaks</strong>
<ul>
<li>Um guia crucial para desenvolvedores que precisam otimizar aplicações Java, focando em ferramentas de monitoramento e técnicas de melhoria de performance.</li>
</ul>
</li>
<li><strong><a href="https://www.amazon.com/Land-Lisp-Learn-Program-Game/dp/1593272812">&ldquo;Land of Lisp: Learn to Program in Lisp, One Game at a Time!&rdquo;</a> por Conrad Barski</strong>
<ul>
<li>Este livro é uma introdução divertida e acessível ao Lisp através do desenvolvimento de jogos. Ele ensina a programar em Lisp e desenvolver seus próprios jogos, o que torna o aprendizado interativo e prazeroso.</li>
</ul>
</li>
<li><strong><a href="https://www.amazon.com/Practical-Common-Peter-Seibel/dp/1590592395">&ldquo;Practical Common Lisp&rdquo;</a> por Peter Seibel</strong>
<ul>
<li>Um guia prático que detalha o uso do Common Lisp na programação do dia a dia, oferecendo uma ótima introdução à linguagem e mostrando como ela pode ser usada para resolver problemas reais.</li>
</ul>
</li>
</ul>

</div>

Expand Down
2 changes: 1 addition & 1 deletion blog/public/index.xml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
<link>http://localhost:1313/2024/07/18/oop/</link>
<pubDate>Thu, 18 Jul 2024 19:00:00 +0000</pubDate>
<guid>http://localhost:1313/2024/07/18/oop/</guid>
<description>Table of Contents Introdução Descobrindo Clojure: Uma Ponte entre Lisp e Java Manutenibilidade Transparência referencial Problemas de Reutilização Pattern Null Object Pattern Singleton Pattern Observer Introdução Ao estudar diferentes linguagens de programação, fui atraído pela família Lisp devido à sua simplicidade e poder. Lisp, criado por John McCarthy em 1958, é conhecido pela notação de código como listas de dados e pela capacidade de manipular código como uma estrutura de dados.</description>
<description>Table of Contents Introdução Descobrindo Clojure: Uma Ponte entre Lisp e Java Manutenibilidade Transparência referencial Problemas de Reutilização Pattern Null Object Pattern Singleton Pattern Observer Recomendações Introdução Ao estudar diferentes linguagens de programação, fui atraído pela família Lisp devido à sua simplicidade e poder. Lisp, criado por John McCarthy em 1958, é conhecido pela notação de código como listas de dados e pela capacidade de manipular código como uma estrutura de dados.</description>
</item>
<item>
<title></title>
Expand Down
2 changes: 1 addition & 1 deletion blog/public/tags/engineering/index.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
<link>http://localhost:1313/2024/07/18/oop/</link>
<pubDate>Thu, 18 Jul 2024 19:00:00 +0000</pubDate>
<guid>http://localhost:1313/2024/07/18/oop/</guid>
<description>Table of Contents Manutenibilidade Transparência referencial Problemas de Reutilização Pattern Null Object Pattern Singleton Pattern Observer Ao estudar diferentes linguagens de programação, fui atraído pela família Lisp devido à sua simplicidade e poder. Lisp, criado por John McCarthy em 1958, é conhecido pela notação de código como listas de dados e pela capacidade de manipular código como uma estrutura de dados. Emacs Lisp e Common Lisp são dois dos muitos dialetos que evoluíram a partir do Lisp original, cada um com suas próprias peculiaridades e casos de uso.</description>
<description>Table of Contents Introdução Descobrindo Clojure: Uma Ponte entre Lisp e Java Manutenibilidade Transparência referencial Problemas de Reutilização Pattern Null Object Pattern Singleton Pattern Observer Introdução Ao estudar diferentes linguagens de programação, fui atraído pela família Lisp devido à sua simplicidade e poder. Lisp, criado por John McCarthy em 1958, é conhecido pela notação de código como listas de dados e pela capacidade de manipular código como uma estrutura de dados.</description>
</item>
</channel>
</rss>
Loading

0 comments on commit 100cca4

Please sign in to comment.