Реализация
(instantiation) в ООП означает факт создания экземпляра (он же объект) некоторого класса. В следующем примере мы создадим только класс, или
спецификацию
(specification), объекта. А поскольку это не сам объект, а лишь его "чертеж", то память для него не выделяется.
class Employee
{
public Employee(string firstName, string lastName, int age, double payRate)
{
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
this.payRate = payRate; }
protected string firstName;
protected string lastName;
protected int age;
protected double payRate;
public double CalculatePay(int hoursWorked)
{
// Здесь вычисляется зарплата, return (payRate * (double)hoursWorked); } }
Чтобы получить объект класса и начать
с
ним работу, мы должны объявить экземпляр класса в своем методе примерно так:
public static void Main()
{
Employee emp = new Employee ("Эми", "Андерсон", 28, 100);
}
В этом примере объявлена переменная
етр
типа
Employee,
и с помощью оператора
new
выполнена ее реализация. Переменная
етр
представляет собой экземпляр класса
Employee
и является объектом
Employee.
Выполнив реализацию объекта, мы можем установить с ним связь через его открытые (public) члены. Например, для объекта
етр
это метод Calcula-tePay. Пока реально объект не существует, вызывать его методы нельзя. (Есть, правда, одно исключение: мы можем вызывать статические члены. Но об этом мы поговорим в главах 5 и 6.) Взгляните на следующий код С#:
public static void MainQ {
Employee emp = new EmployeeQ;
Employee emp2 = new Employee(); }
Здесь два экземпляра одного класса
Employee — етр
и
етр2.
Оба объекта одинаковы с точки зрения программной реализации, но у каждого экземпляра свой набор данных, который может обрабатываться отдельно от другого. Аналогично можно создать массив или набор (collection) объектов
Employee.
Работу с массивами мы подробно рассмотрим в главе 7. Здесь же я хочу обратить ваше внимание на то, что большинство объектно-ориентированных языков поддерживает создание и обработку массивов объектов. При этом объекты можно объединять в группы и обрабатывать в операторах цикла, вызывая методы массива этих объектов либо обращаясь к элементам массива по индексу. Сравните это с той работой, которую нужно проделать со связанным списком, когда требуется вручную увязывать каждый элемент списка с предыдущим и последующим элементами.