(Continuación del primer artículo)
Manteniendo el pensamiento orientado a objetos en todo momento, este tema parece un poco extenso. Lo que acabo de decir y mencionar aquí son en realidad solo algunos problemas menores a los que se debe prestar atención al codificar. Por lo tanto, puede ser más apropiado cambiar el término "en todo momento" por "tener en cuenta".
Algunos comentarios sobre algunas características de Delphi:
Me pregunto si ha notado que todos los componentes (incluidos los controles) colocados en un formulario Delphi son visibles para otros formularios. Para ser precisos, estos componentes son el contenido de la parte pública del formulario. Por un lado, este resultado es bueno, debido a su flexibilidad, otras clases pueden hacer referencia fácilmente a estos componentes en el formulario, establecer sus propiedades, ejecutar sus métodos, eventos, etc., pero por otro lado, sus fallas también son obvias; Sí, eso conduce a la pérdida de la encapsulación del formulario. En mi opinión, estos componentes colocados en el Formulario, en lo que respecta a la intención del usuario, deberían existir como propiedades privadas del Formulario y no deberían ser visibles para otras clases u otros Formularios. Incluso si necesita acceder a ellos, debe acceder a ellos indirectamente a través de una serie de métodos de propiedad proporcionados por Form.
Dé un ejemplo para que todos tengan una comprensión perceptiva:
Procedimiento TForm1.Button1Click(Remitente: TObject);
comenzar
Form2.Edit1.Text := 'abc'; // <-- No estoy de acuerdo con la forma en que está escrita esta oración.
fin;
Es posible que muchas personas no tengan el concepto de encapsulación en mente cuando escriben dicho código, pero después de leer este artículo, nunca volverás a hacer algo así (¡cambia tus formas!). En mi opinión, TForm1 es TForm1 y TForm2 es TForm2. Todos existen para lograr ciertas funciones específicas, por lo que proporcionan algunas interfaces con el mundo exterior (algunos atributos, métodos y eventos. Estrictamente hablando, los eventos también son atributos). lograr las funciones prometidas. En cuanto a la implementación específica de estas interfaces, deben ser mantenidas por sí mismas. No hay necesidad ni forma de que intervenga el mundo exterior. Esta idea corresponde a aplicaciones prácticas, es decir, la cuestión de si From1 debe acceder directamente a Form2.Edit1. Personalmente prefiero la siguiente implementación:
//Lo siguiente es parte del contenido de TForm1 en la Unidad1
procedimiento TForm1.Button1Click (Remitente: TObject);
comenzar
TForm2(FAnotherForm).EditText := 'abc'; // <-- Esta implementación encarna la idea de encapsulación
fin;
// La siguiente es la definición de TForm2 en Unit2
tipo
TForm2 = clase(TForm)
Editar1: TEditar;
privado
función GetEditText: cadena;
procedimiento SetEditText (valor constante: cadena);
público
propiedad EditText: cadena leída GetEditText escritura SetEditText;
// <-- Mi uso recomendado;
fin;
…
función TForm2.GetEditText: cadena;
comenzar
resultado: = Editar1.Texto;
fin;
procedimiento TForm2.SetEditText (Valor constante: cadena);
comenzar
si Valor <> EditarTexto entonces
Editar1.Texto:= Valor;
fin;
FAnotherForm aquí es una propiedad privada de TForm1, que es un puntero a una instancia de TForm2 (este uso se enfatizó en el primer artículo). Acceder a la propiedad EditText de TForm2 en lugar de acceder imprudentemente directamente a Edit1.Text de TForm2 encarna una idea, es decir, la idea de división del trabajo y colaboración, es decir, la idea de independencia, es decir, la idea de encapsulación.
(Sin terminar, continuará)
Más artículos