Вы уже встречались с понятием модульности. Под модулем обычно имеется в виду часть программы, которая может включать данные и одну или несколько процедур. Второй стороной модуля являются строгие и относительно простые правила его использования, которые в программировании выражаются понятием интерфейс. В этом смысле и процедуры, и функции образуют модули, причем их интерфейс определяется заголовком процедуры или функции . Классическим модулем в Pascal является Unit. В нем существует отдельный раздел описывающий интерфейс — interface

При разработке модулей остается не вполне ясно, какие процедуры должны быть включены в один модуль, а какие в другой. ООП дает собственный критерий распределения процедур по логическим модулям — каждый вид объектов описывается некоторыми данными и процедурами, выполняющими основной набор действий над ними — методами. И данные и методы объединяются в одно логическое понятие — класс. Особенность методов еще и в том, что они применимы только к объектам одного класса. Обычно описание класса вместе с реализацией методов и выделяют в отдельный модуль. 

Чтобы определить модуль мы прибегли к понятию интерфейс. Наличие интерфейса неявно предполагает, что не все детали модуля проявляются при его использовании, иными словами, некоторая часть содержания модуля от пользователя скрыта. Эта часть называется реализацией (implementation). В процедурах и функциях скрыты локальные переменные и алгоритм, в Unit скрыты статические данные, константы, типы, процедуры и функции не объявленные в разделе interface. 

В объектно–ориентированном программировании механизмам скрытия уделяется особое внимание, в связи с чем введено понятие инкапсуляции. В полном смысле инкапсуляция означает объединение в одно целое данных и методов работы с ними с одной стороны, и обеспечение доступа к данным только через методы класса, т.е. скрытие реализации, с другой. Таким образом, понятие класса в ООП тесно связано с интерфейсом объектов и скрытием их реализации, т.е. можно сказать, что ООП развивает понятие модульности. 

Даже для встроенных типов в паскаль можно наблюдать инкапсуляцию. Так средства языка не позволяют непосредственно прочесть дробную часть действительного числа, узнать длину строки не используя функцию length или не прибегая к специальным функциям определить размер массива. 

При структурном подходе к проектированию и программированию большое значение придается иерархической организации программы. Имеется главная программа, которая вызывает подчиненные подпрограммы более низкого уровня иерархии, а они в свою очередь обращаются к другим подпрограммам и т.д. 

Иерархия понятий в ООП поддерживается механизмом наследования. При разработке очередного класса, программист имеет возможность указать, что объекты этого класса являются объектами другого более общего класса, и описать лишь его новые дополнительные особенности. 

Наконец, последний из упомянутых принципов — абстрагирование. Под абстрагированием понимается формирование общих понятий. Такими понятиями в программировании являются типы. Каждый тип соответствует не одному реальному объекту, а целому множеству: строки, числа, записи о студентах, трехмерные вектора и т.д. являются абстракциями, позволяющими хранить конкретные данные определенного типа. Класс тоже является типом. 
Кроме того, ООП позволяет создавать абстракции операций. Это явление получило название полиморфизмаПолиморфизм позволяет определять логически схожие действия одинаково над различными данными. 

Полиморфизм присутствует в самом языке Pascal. Вспомните как выполняется операция сложения над числами и строками. И то, и другое мы легко воспринимаем как сложение, хотя смысл операции в каждом из случаев совершенно различен. Можно было бы определить и операцию сложения файлов. Другой пример полиморфизма — вывод данных. Строка непосредственно выводится на дисплей, тогда как число сначала преобразуется в строку, а затем полученная строка выводится. При отсутствии такого полиморфизма программы стали бы значительно менее наглядными. 

В Delphi Object Pascal полиморфизм становится инструментом программиста — методы разных классов могут иметь одинаковые имена. Какое именно действие будет выполняться, зависит от класса объекта. Кроме того, виртуальные методы позволяют не определять класс объекта во время компиляции программы, а отложить выяснение до момента обращения к методу. Таким образом, один и тот же код может с успехом работать для объектов различных классов, которые будут обрабатываться в процессе выполнения программы.