James 2017-07


James é um projeto Open Source que será a base de todos os meus projetos Orientados a Objetos codificados em Object Pascal.

Unsplash image

James

O que é? James é uma coleção de classes e interfaces para projetos verdadeiramente orientados a objetos escritos em Object Pascal. Esta API está sendo escrita em Free Pascal e Lazarus. No entanto, torná-lo compatível com Delphi pode ser possível ou mesmo pode ser um objetivo (estamos dependendo de mais contribuidores para torná-lo possível).

Por quê? Nós não queremos mais escrever o código procedural, nunca mais. Queremos escrever código elegante, limpo e sustentável usando a OOP.

Princípios. O código possui alguns princípios de design:

  • Totalmente baseado em interface
  • A memória é liberada automaticamente
  • Todos os métodos públicos são implementações de métodos de interface
  • Todos os métodos públicos retornam uma instância de interface ou tipo primitivo
  • Nenhum uso de NULL em argumentos ou retornos de métodos
  • Sem algoritmos nos construtores
  • Não há getters e setters
  • Sem casting ou reflexão utilizando RTTI
  • Sem procedimentos e funções, apenas Objetos

Mais informações. Leia mais sobre o James aqui e aqui.

Como contribuir?

Apenas faça um fork do repositório e envie-nos um Pull Request (PR).

Cada PR precisa trabalhar apenas sobre uma única issue ou em uma única responsabilidade.

Por favor, nomeie seu PR usando o mesmo estilo de outros PR já finalizados neste projeto.

Certifique-se de que o seu ramo seja construído sem quaisquer warnings/problemas.

Se você tiver dúvidas ou sugestões gerais, não hesite em enviar uma nova Github issue.

Atualizações

Ainda estamos em uma versão alfa muito precoce, a API pode e vai mudar com freqüência. Por favor, use isso por sua conta e risco, até liberarmos a versão 1.0.

Algumas unidades foram excluídas e outras foram criadas. Classes foram movidas e renomeadas.

Vejamos abaixo as modificações mais recentes:

  • PR #18: Só vamos utilizar caracteres ASCII para facilitar o uso no Delphi sem haver problemas de UNICODE (veja mais).
  • PR #19: A classe TStreamBase64 não apenas foi renomeada para TBase64Stream, como também está numa nova unidade chamada james.format.base64.clss.
  • PR #20: A unidade james.data.xml.clss foi renomeada para james.format.xml.clss adicionando um novo prefixo format que poderá ser utilizado por outros “formatos” como JSON, INI, etc.
  • PR #21: As unidades james.files.* foram renomeadas para james.io.*.
  • PR #23: Criada uma nova unidade james.crypto.md5.clss que, além de adicionar um novo prefixo crypto para outros tipos de criptografia, também contém classes relacionadas ao MD5.
  • PR #30: Adicionado as classes que implementam Constraints.

A maioria das modificações são apenas estéticas ou apenas para melhorar a organização. No entanto são modificações necessárias para fazer o projeto crescer com saúde.

Por enquanto é isso. Aguardo seus comentários aqui embaixo.

Até logo.

Posts Relacionados

  • Memória Segura Utilizando Instâncias de Interfaces

  • Classes Mutáveis vs Objetos Imutáveis

  • Implementando Interfaces Utilizando Diferente Assinaturas de Métodos

  • Usando Paths ao invés de Diretivas de Compilação

  • Trabalhando com Exceções em Requisições HTTP

  • Tipo object Continua Vivo

  • Array de Objetos

  • Variáveis Locais Deveriam ter Nomes Curtos

  • Como Dividir e Organizar o Código em Formulários com Muitos Widgets

  • Pascal Deveria ser Modernizado?