<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>C&#43;&#43; | João Araujo</title>
    <link>/category/c/</link>
      <atom:link href="/category/c/index.xml" rel="self" type="application/rss+xml" />
    <description>C&#43;&#43;</description>
    <generator>Source Themes Academic (https://sourcethemes.com/academic/)</generator><language>pt-br</language><copyright>Creative Commons</copyright><lastBuildDate>Fri, 19 Aug 2022 15:18:06 -0300</lastBuildDate>
    <image>
      <url>/images/logo_hu_98df43136ff73b59.png</url>
      <title>C&#43;&#43;</title>
      <link>/category/c/</link>
    </image>
    
    <item>
      <title>Desenvolvimento de Grandes Projetos em C&#43;&#43;</title>
      <link>/post/grandes-projetos-em-c&#43;&#43;/</link>
      <pubDate>Fri, 19 Aug 2022 15:18:06 -0300</pubDate>
      <guid>/post/grandes-projetos-em-c&#43;&#43;/</guid>
      <description>&lt;h1 id=&#34;problemas-comuns-encontrados-em-grandes-projetos&#34;&gt;Problemas Comuns encontrados em Grandes Projetos&lt;/h1&gt;
&lt;h2 id=&#34;dependências-cíclicas&#34;&gt;Dependências Cíclicas&lt;/h2&gt;
&lt;p&gt;Um dependência cíclica ocorre quando uma classe depende de outra que, num círculo vicioso, também depende de outras classes que por suas vez dependem da classe original&amp;hellip;&lt;/p&gt;
&lt;p&gt;No Exemplo, a Classe &lt;em&gt;Circuito&lt;/em&gt; inclui as definições das classes &lt;em&gt;Fio&lt;/em&gt; e &lt;em&gt;Elemento&lt;/em&gt;, a Classe &lt;em&gt;Elemento&lt;/em&gt; inclui as definições das classes &lt;em&gt;Circuito&lt;/em&gt; e &lt;em&gt;Fio&lt;/em&gt;, que por sua vez inclui as definições de &lt;em&gt;Elemento&lt;/em&gt; e &lt;em&gt;Circuito&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/post/grandes-projetos-em-c&amp;#43;&amp;#43;/dependenciaciclica.png&#34; alt=&#34;Dependência Cíclica&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;tempo-excessivo-para-linkar-dependências&#34;&gt;Tempo excessivo para linkar dependências.&lt;/h2&gt;
&lt;p&gt;Isso ocorre quando tentamos usar elementos pesados em vez de elementos leves, ou seja, elementos pesados são aqueles com um excesso de funcionalidades que o tornam mais pesado, com funções que nem sempre são utilizadas.&lt;/p&gt;
&lt;p&gt;Exemplo seria uma classe &lt;em&gt;String&lt;/em&gt; com inúmeras funcionalidades que tornam gigantesco o executável de um simples programa como &amp;ldquo;Hello, Wolrd!&amp;rdquo;.&lt;/p&gt;
&lt;h2 id=&#34;tempo-excessivo-para-compilação-de-dependências&#34;&gt;Tempo excessivo para compilação de dependências&lt;/h2&gt;
&lt;p&gt;C++ normalmente utiliza mais arquivos que um programa em C. Um acoplamento excessivo entre esses arquivos torna o tempo de compilação muito maior do que seria necessário.&lt;/p&gt;
&lt;p&gt;Por exemplo, o componente &lt;strong&gt;meuerro&lt;/strong&gt; define uma &lt;em&gt;struct&lt;/em&gt; &lt;em&gt;MeuErro&lt;/em&gt; que contém a enumeração de todos os possíveis códigos de erro. deste modo, quando um novo componente é criado, pode ser necessário criar um novo código, só que isto levaria à compilação de todos os componentes que utilizam &lt;strong&gt;meuerro&lt;/strong&gt;. Se o número de componentes cresce, acabamos abandonando a ideia de um novo código de erro para aproveitar apenas códigos genéricos, como &amp;ldquo;ERRO&amp;rdquo; ou &amp;ldquo;ALERTA&amp;rdquo;. Neste ponto, o designjhe se tornar praticamente inútil.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/post/grandes-projetos-em-c&amp;#43;&amp;#43;/meuerro.png&#34; alt=&#34;MeuErro&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;espaço-de-nomes-global&#34;&gt;Espaço de nomes global&lt;/h2&gt;
&lt;p&gt;A proliferação de nomes globais pode ser problemática. Obviamente esses nomes podem colidir, mas pode ser ainda mais grave.&lt;/p&gt;
&lt;p&gt;Por exemplo, uma definicão do tipo:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;TargetId id;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Isso pode levar a dúvidas sobre onde teria sido declarado este tipo e quais são suas caracterísiticas. É uma classe? É uma &lt;em&gt;struct&lt;/em&gt;?&lt;/p&gt;
&lt;p&gt;Uma definição do tipo:
// upd_system.h
#ifndef INCLUDE_UPD_SYSTEM
#define INCLUDE_UPD_SYSTEM&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;typedef int TargetId;
class upd_System {
  // ..
public:
  // ..
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;seria uma má ideia. No caso, a declaração ficaria sem ambiguidade se fosse acrescentado seu &lt;em&gt;namespace&lt;/em&gt;
// upd_system.h
#ifndef INCLUDE_UPD_SYSTEM
#define INCLUDE_UPD_SYSTEM&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;class upd_System {
  // ..
public:
  typedef int TargetId;
  // ..
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Assim, &lt;em&gt;TargegId&lt;/em&gt; poderia ser usado com:
upd_System::TargetId id;&lt;/p&gt;
&lt;p&gt;E seria facilmente visto onde esta definição foi declarada.&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>
