Für diese drei grundlegenden Operationen existieren von der Sprache vordefinierte Operationen, der Programmierer hat jedoch die Möglichkeit, sie selbst zu definieren. Dies geschieht durch sogenannte kontrollierte Typen.
Der Programmierer kann drei Prozeduren definieren: Initialize wird nach der defaultmäßigen Initialisierung aufgerufen, Adjust als letzter Teil der defaultmäßigen Zuweisung (eines Objekts eines nicht-limitierten Typs) und Finalize, bevor die Finalisierung der Teile des Objekts durchgeführt wird.
Ein kontrollierter Typ ist eine Typerweiterung des Typs Controlled, der im Paket Ada.Finalization definiert ist:
package Ada.Finalization is
Bei einer normalen Zuweisung eines privaten kontrollierten Typs der Form a := b werden folgende Operationen ablaufen: