Понятие о классах (PascalABC.NET)
Классы – основа объектно-ориентированного программирования (ООП).
В ООП объекты программист видит именованными элементами, созданными на основе классов. Класс – абстрактное описание наподобие чертежа, по которому конструируется конкретный объект. Класс содержит в себе описания данных и средств управления этими данными. Данные в классе называются полями, а средства для манипуляции полями называются методами. Поле – это некоторый аналог переменной, а метод можно считать подпрограммой. Объект создается путем вызова метода, называемого конструктором.
При обращении к полям и методам объекта используется точечная нотация. После имени объекта (или класса) ставится разделяющая точка, вслед за которой указывается имя поля или метода. Все рассмотренные нами типы переменных являются классами, поэтому переменные этих типов – объекты, имеющие некоторые поля и методы. Обращение к полям мы уже встречали, когда знакомились с константами вида T.V, например real.MaxValue означает обращение к полю MaxValue класса real.
Полезно помнить, что каждый базовый (следовательно, заранее известный в программе) класс имеет методы Print и Println, позволяющие выводить значение объекта с последующим пробелом или сменой строки, как это делают стандартные процедуры Print и Println. Например, мы можем вывести значение real.MaxValue, записав real.MaxValue.Print. Если воспринимать точку, как разделитель в перечислении, такая запись читается вполне логично: «Класс real. Поле MaxValue. Вывести». Точки проявляют тенденцию множиться, но это нормальное явление и в дальнейшем станут понятны все преимущества такой записи, позволяющей в одной строке кода реализовать весьма большой алгоритм.
Метод Print работает как функция и возвращает в качестве результата переданные ему данные. Посмотрите пример, но не пишите подобного кода, пока не научитесь понимать этот механизм.
1 begin
2 integer.MaxValue.Print.Println.Sqrt.Println.Sqr.Print;
3 end.
2147483647 2147483647 46340.950001052 2147483647
Рассмотрим, как получились такие результаты. Значение integer.MaxValue передается методу Print, который выводит его, а далее передает в виде объекта класса integer с некоторым внутренним именем, например, X. Затем формируется выражение вида X.Println. Оно обращается к методу Println класса integer и выводит значение X, по-прежнему равное integer.MaxValue. И снова это значение передается дальше в виде объекта X. Получается конструкция вида X.Sqrt. Объект X автоматически приводится к классу real, как того требует аргумент метода Sqrt. Вычисляется значение квадратного корня и возвращается, как объект X классa real. Вновь получаем X.Println, значение X выводится, а объект X передается дальше. Остается выполнить X.Sqr.Print. Получаем с некоторой точностью исходное значение, но уже в типе real, и выводим его.
Каждый тип, реализованный в виде класса, можно расширить путем добавления новых методов, которые в этом случае называются методами расширения или просто расширениями. При этом само расширение не затрагивает код класса, а остается в пользовательском коде. В PascalABC.NET имеется большое количество расширений классов Microsoft .NET Framework, а также собственных классов. Как и любой метод, расширение записывается через точку. В работе программисту обычно непринципиально знать, использует ли он метод класса или расширение.