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

  • Diretivas de Compilação

  • Declarando Unidades

  • Objetos Validadores

  • Atributos Não Existem

  • Mutabilidade Encapsulada

  • Atributos Primários e Secundários

  • Estado do Objeto

  • Herdar para Rotular

  • Observando Objetos

  • Eventos e Objetos