<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel><category>pcsoft.br.windev</category><copyright>Copyright 2026, PC SOFT</copyright><lastBuildDate>25 Jul 2025 06:15:19 Z</lastBuildDate><pubDate>25 Jul 2025 06:11:23 Z</pubDate><description>**O Padrão Builder** é um padrão de design criacional que separa a construção de um objeto complexo de sua representação , permitindo criar objetos de forma estruturada e flexível.&#13;
&#13;
### Características principais:&#13;
&#13;
1. **Construção Step-by-Step**: Permite construir objetos complexos passo a passo &#13;
1. **Flexibilidade**: O mesmo processo de construção pode criar diferentes representações &#13;
1. **Legibilidade**: Oferece uma interface fluente que permite encadear métodos, tornando o código mais intuitivo e legível &#13;
1. **Validação**: Garante que todos os parâmetros obrigatórios sejam definidos antes do objeto ser construído &#13;
&#13;
### Principais vantagens:&#13;
&#13;
- **Evita construtores complexos** com muitos parâmetros&#13;
- **Permite validação** antes da criação do objeto&#13;
- **Facilita criação de objetos imutáveis**&#13;
- **Melhora a legibilidade** do código&#13;
&#13;
O exemplo que criei mostra como implementar este padrão em WinDev para um sistema de criação de relatórios, demonstrando a sintaxe fluente e as validações típicas do padrão Builder.&#13;
&#13;
# Padrão Builder em WinDev (Builder Design Pattern)&#13;
&#13;
## O que é o Padrão Builder?&#13;
&#13;
O **Padrão Builder** é um padrão de design criacional que permite construir objetos complexos passo a passo. Ele separa a construção de um objeto complexo de sua representação, permitindo que o mesmo processo de construção possa criar diferentes representações do objeto.&#13;
&#13;
### Principais características:&#13;
&#13;
- **Construção Step-by-Step**: Permite criar objetos em etapas&#13;
- **Flexibilidade**: Mesmo processo pode criar diferentes representações&#13;
- **Legibilidade**: Código mais claro e intuitivo&#13;
- **Validação**: Permite validar o objeto antes da criação&#13;
&#13;
## Exemplo em WinDev (Português)&#13;
&#13;
### Cenário: Sistema de Criação de Relatórios&#13;
&#13;
```windev&#13;
// Classe principal - Relatório&#13;
Relatorio é uma Classe&#13;
	PRIVADO&#13;
		m_titulo é cadeia&#13;
		m_subtitulo é cadeia  &#13;
		m_dados é array de cadeia&#13;
		m_formato é cadeia&#13;
		m_orientacao é cadeia&#13;
	FIM&#13;
	&#13;
	// Getters&#13;
	PROPRIEDADE Titulo()&#13;
		RESULTADO m_titulo&#13;
	FIM&#13;
	&#13;
	PROPRIEDADE Subtitulo()&#13;
		RESULTADO m_subtitulo&#13;
	FIM&#13;
	&#13;
	PROPRIEDADE Dados()&#13;
		RESULTADO m_dados&#13;
	FIM&#13;
FIM&#13;
&#13;
// Classe Builder&#13;
RelatorioBuilder é uma Classe&#13;
	PRIVADO&#13;
		m_relatorio é Relatorio&#13;
	FIM&#13;
	&#13;
	// Construtor&#13;
	PROCEDIMENTO Construtor()&#13;
		m_relatorio = novo Relatorio()&#13;
	FIM&#13;
	&#13;
	// Métodos de construção&#13;
	PROCEDIMENTO ComTitulo(titulo é cadeia)&#13;
		m_relatorio.m_titulo = titulo&#13;
		RESULTADO Este&#13;
	FIM&#13;
	&#13;
	PROCEDIMENTO ComSubtitulo(subtitulo é cadeia)&#13;
		m_relatorio.m_subtitulo = subtitulo&#13;
		RESULTADO Este&#13;
	FIM&#13;
	&#13;
	PROCEDIMENTO AdicionarDados(dados é cadeia)&#13;
		m_relatorio.m_dados.Adicionar(dados)&#13;
		RESULTADO Este&#13;
	FIM&#13;
	&#13;
	PROCEDIMENTO ComFormato(formato é cadeia)&#13;
		m_relatorio.m_formato = formato&#13;
		RESULTADO Este&#13;
	FIM&#13;
	&#13;
	PROCEDIMENTO ComOrientacao(orientacao é cadeia)&#13;
		m_relatorio.m_orientacao = orientacao&#13;
		RESULTADO Este&#13;
	FIM&#13;
	&#13;
	// Método final de construção&#13;
	PROCEDIMENTO Construir()&#13;
		// Validações antes de criar o objeto&#13;
		SE m_relatorio.m_titulo = "" ENTÃO&#13;
			RESULTADO Nulo&#13;
		FIM&#13;
		&#13;
		relatorio_final é Relatorio = m_relatorio&#13;
		m_relatorio = novo Relatorio() // Reset para próximo uso&#13;
		RESULTADO relatorio_final&#13;
	FIM&#13;
FIM&#13;
&#13;
// Uso do Builder&#13;
PROCEDIMENTO CriarRelatorio()&#13;
	builder é RelatorioBuilder = novo RelatorioBuilder()&#13;
	&#13;
	relatorio é Relatorio = builder.ComTitulo("Relatório de Vendas")&#13;
									 .ComSubtitulo("Janeiro 2025")&#13;
									 .AdicionarDados("Vendas: R$ 150.000")&#13;
									 .AdicionarDados("Meta: R$ 120.000")&#13;
									 .ComFormato("PDF")&#13;
									 .ComOrientacao("Retrato")&#13;
				 				         .Construir()&#13;
	&#13;
	SE relatorio &lt;&gt; Nulo ENTÃO&#13;
		Info("Relatório criado: " + relatorio.Titulo())&#13;
	SENÃO&#13;
		Erro("Erro ao criar relatório - dados obrigatórios não informados")&#13;
	FIM&#13;
FIM&#13;
```&#13;
&#13;
## Example in WinDev (English)&#13;
&#13;
### Scenario: Report Creation System&#13;
&#13;
```windev&#13;
// Main class - Report&#13;
Report IS a Class&#13;
	PRIVATE&#13;
		m_title is string&#13;
		m_subtitle is string&#13;
		m_data is array of string&#13;
		m_format is string&#13;
		m_orientation is string&#13;
	END&#13;
	&#13;
	// Getters&#13;
	PROPERTY Title()&#13;
		RESULT m_title&#13;
	END&#13;
	&#13;
	PROPERTY Subtitle()&#13;
		RESULT m_subtitle&#13;
	END&#13;
	&#13;
	PROPERTY Data()&#13;
		RESULT m_data&#13;
	END&#13;
END&#13;
&#13;
// Builder class&#13;
ReportBuilder IS a Class&#13;
	PRIVATE&#13;
		m_report is Report&#13;
	END&#13;
	&#13;
	// Constructor&#13;
	PROCEDURE Constructor()&#13;
		m_report = new Report()&#13;
	END&#13;
	&#13;
	// Construction methods&#13;
	PROCEDURE WithTitle(title is string)&#13;
		m_report.m_title = title&#13;
		RESULT This&#13;
	END&#13;
	&#13;
	PROCEDURE WithSubtitle(subtitle is string)&#13;
		m_report.m_subtitle = subtitle&#13;
		RESULT This&#13;
	END&#13;
	&#13;
	PROCEDURE AddData(data is string)&#13;
		m_report.m_data.Add(data)&#13;
		RESULT This&#13;
	END&#13;
	&#13;
	PROCEDURE WithFormat(format is string)&#13;
		m_report.m_format = format&#13;
		RESULT This&#13;
	END&#13;
	&#13;
	PROCEDURE WithOrientation(orientation is string)&#13;
		m_report.m_orientation = orientation&#13;
		RESULT This&#13;
	END&#13;
	&#13;
	// Final construction method&#13;
	PROCEDURE Build()&#13;
		// Validations before creating the object&#13;
		IF m_report.m_title = "" THEN&#13;
			RESULT Null&#13;
		END&#13;
		&#13;
		final_report is Report = m_report&#13;
		m_report = new Report() // Reset for next use&#13;
		RESULT final_report&#13;
	END&#13;
END&#13;
&#13;
// Using the Builder&#13;
PROCEDURE CreateReport()&#13;
	builder is ReportBuilder = new ReportBuilder()&#13;
	&#13;
	report is Report = builder.WithTitle("Sales Report")&#13;
							  .WithSubtitle("January 2025")&#13;
							  .AddData("Sales: $150,000")&#13;
							  .AddData("Target: $120,000")&#13;
							  .WithFormat("PDF")&#13;
							  .WithOrientation("Portrait")&#13;
							  .Build()&#13;
	&#13;
	IF report &lt;&gt; Null THEN&#13;
		Info("Report created: " + report.Title())&#13;
	ELSE&#13;
		Error("Error creating report - required data not provided")&#13;
	END&#13;
END&#13;
```&#13;
&#13;
## Vantagens do Padrão Builder&#13;
&#13;
### 1. **Legibilidade do Código**&#13;
&#13;
O código fica mais claro e auto-documentado, mostrando exatamente como o objeto está sendo construído.&#13;
&#13;
### 2. **Flexibilidade**&#13;
&#13;
Permite criar diferentes tipos de objetos usando o mesmo processo de construção.&#13;
&#13;
### 3. **Validação**&#13;
&#13;
Pode validar os dados antes de criar o objeto final, garantindo consistência.&#13;
&#13;
### 4. **Method Chaining**&#13;
&#13;
Permite encadear métodos para uma sintaxe mais fluente.&#13;
&#13;
### 5. **Objetos Imutáveis**&#13;
&#13;
Facilita a criação de objetos imutáveis e thread-safe.&#13;
&#13;
## Quando Usar o Padrão Builder&#13;
&#13;
- **Objetos complexos** com muitos parâmetros opcionais&#13;
- **Construção passo a passo** é necessária&#13;
- **Diferentes representações** do mesmo objeto&#13;
- **Validação complexa** antes da criação&#13;
- **Evitar construtores** com muitos parâmetros&#13;
&#13;
## Advantages of Builder Pattern&#13;
&#13;
### 1. **Code Readability**&#13;
&#13;
The code becomes clearer and self-documenting, showing exactly how the object is being constructed.&#13;
&#13;
### 2. **Flexibility**&#13;
&#13;
Allows creating different types of objects using the same construction process.&#13;
&#13;
### 3. **Validation**&#13;
&#13;
Can validate data before creating the final object, ensuring consistency.&#13;
&#13;
### 4. **Method Chaining**&#13;
&#13;
Enables method chaining for more fluent syntax.&#13;
&#13;
### 5. **Immutable Objects**&#13;
&#13;
Facilitates creation of immutable and thread-safe objects.&#13;
&#13;
## When to Use Builder Pattern&#13;
&#13;
- **Complex objects** with many optional parameters&#13;
- **Step-by-step construction** is needed&#13;
- **Different representations** of the same object&#13;
- **Complex validation** before creation&#13;
- **Avoid constructors** with many parameters&#13;
&#13;
--&#13;
Adriano José Boller&#13;
______________________________________________&#13;
Consultor e Representante Oficial da&#13;
PcSoft no Brasil&#13;
+55 (41) 99949 1800&#13;
adrianoboller@gmail.com&#13;
skype: adrianoboller&#13;
http://wxinformatica.com.br/</description><ttl>30</ttl><generator>WEBDEV</generator><language>pt_BR</language><link>https://forum.pcsoft.fr/en-US/pcsoft.br.windev/5150-que-padrao-builder/read.awp</link><title>O que é o Padrão Builder?</title><managingEditor>moderateur@pcsoft.fr (The moderator)</managingEditor><webMaster>webmaster@pcsoft.fr (The webmaster)</webMaster><item><author>Boller</author><category>pcsoft.br.windev</category><comments>https://forum.pcsoft.fr/en-US/pcsoft.br.windev/5150-que-padrao-builder-5155/read.awp</comments><pubDate>25 Jul 2025 06:15:19 Z</pubDate><description>Esses exemplos serão mais detalhados, incluindo integração com o ambiente WinDev (como uso de HFSQL para persistência de dados e…</description><guid isPermaLink="true">https://forum.pcsoft.fr/en-US/pcsoft.br.windev/5150-que-padrao-builder-5155/read.awp</guid><link>https://forum.pcsoft.fr/en-US/pcsoft.br.windev/5150-que-padrao-builder-5155/read.awp</link><source url="https://forum.pcsoft.fr/en-US/pcsoft.br.windev/5150-que-padrao-builder/read.awp">O que é o Padrão Builder?</source><title>Re: O que é o Padrão Builder?</title></item><item><author>Boller</author><category>pcsoft.br.windev</category><comments>https://forum.pcsoft.fr/en-US/pcsoft.br.windev/5150-que-padrao-builder-5154/read.awp</comments><pubDate>25 Jul 2025 06:14:30 Z</pubDate><description>Vamos criar uma classe Fatura para representar uma fatura eletrônica em um sistema de faturamento, inspirado no comentário de Ol…</description><guid isPermaLink="true">https://forum.pcsoft.fr/en-US/pcsoft.br.windev/5150-que-padrao-builder-5154/read.awp</guid><link>https://forum.pcsoft.fr/en-US/pcsoft.br.windev/5150-que-padrao-builder-5154/read.awp</link><source url="https://forum.pcsoft.fr/en-US/pcsoft.br.windev/5150-que-padrao-builder/read.awp">O que é o Padrão Builder?</source><title>Re: O que é o Padrão Builder?</title></item><item><author>Boller</author><category>pcsoft.br.windev</category><comments>https://forum.pcsoft.fr/en-US/pcsoft.br.windev/5150-que-padrao-builder-5153/read.awp</comments><pubDate>25 Jul 2025 06:13:48 Z</pubDate><description>Vamos criar uma classe Evento para representar um evento em um sistema de gestão de eventos. O evento terá atributos como ID do …</description><guid isPermaLink="true">https://forum.pcsoft.fr/en-US/pcsoft.br.windev/5150-que-padrao-builder-5153/read.awp</guid><link>https://forum.pcsoft.fr/en-US/pcsoft.br.windev/5150-que-padrao-builder-5153/read.awp</link><source url="https://forum.pcsoft.fr/en-US/pcsoft.br.windev/5150-que-padrao-builder/read.awp">O que é o Padrão Builder?</source><title>Re: O que é o Padrão Builder?</title></item><item><author>Boller</author><category>pcsoft.br.windev</category><comments>https://forum.pcsoft.fr/en-US/pcsoft.br.windev/5150-que-padrao-builder-5152/read.awp</comments><pubDate>25 Jul 2025 06:13:18 Z</pubDate><description>Abaixo, apresento novos exemplos do padrão Builder em WLangage (usado no ambiente WinDev), conforme solicitado, com um exemplo e…</description><guid isPermaLink="true">https://forum.pcsoft.fr/en-US/pcsoft.br.windev/5150-que-padrao-builder-5152/read.awp</guid><link>https://forum.pcsoft.fr/en-US/pcsoft.br.windev/5150-que-padrao-builder-5152/read.awp</link><source url="https://forum.pcsoft.fr/en-US/pcsoft.br.windev/5150-que-padrao-builder/read.awp">O que é o Padrão Builder?</source><title>Re: O que é o Padrão Builder?</title></item><item><author>Boller</author><category>pcsoft.br.windev</category><comments>https://forum.pcsoft.fr/en-US/pcsoft.br.windev/5150-que-padrao-builder-5151/read.awp</comments><pubDate>25 Jul 2025 06:12:42 Z</pubDate><description>Desculpe pela confusão! Abaixo, apresento uma explicação revisada do padrão Builder com exemplos em WLangage (linguagem usada no…</description><guid isPermaLink="true">https://forum.pcsoft.fr/en-US/pcsoft.br.windev/5150-que-padrao-builder-5151/read.awp</guid><link>https://forum.pcsoft.fr/en-US/pcsoft.br.windev/5150-que-padrao-builder-5151/read.awp</link><source url="https://forum.pcsoft.fr/en-US/pcsoft.br.windev/5150-que-padrao-builder/read.awp">O que é o Padrão Builder?</source><title>Re: O que é o Padrão Builder?</title></item></channel></rss>
