A Delphi unit already has the split that other languages keep reinventing. Everything declared above implementation is visible to units that use this one. Everything below it belongs to the unit alone, and a type or routine that appears only there cannot even be named from outside.
The part people underrate is where the uses clause goes. A unit listed in the interface uses clause becomes something your public declarations may depend on, so a change to that unit's interface reaches further than it needs to. When only the routine bodies need it, list it in the implementation uses clause instead. The compiler makes the same point in its own way. Units may depend on each other mutually, but not through a cycle made only of interface uses clauses.
When I open an old desktop project, the interface sections and their uses lists are the first thing I read. A short interface section with a short uses list is the closest thing Pascal offers to a published module surface, and it costs nothing to keep it that way.
