Языки программирования. Обзор-ликбез.
Спецвыпуск Хакер, номер #004, стр. 004-036-3
Обучение языкам программирования лучше начинать с языков модульного принципа - он наиболее прост и понятен. Кроме того, он является как бы "подложкой" для остальных двух принципов. Они - вроде наследников могущественного папаши с большими деньгами. ;-)
Второй из рассматриваемых принципов - объектно-ориентированное программирование. Программы такого плана пишутся не каждый раз "с нуля", а как модернизации к старым модулям и уже написанным программам. Объектно-ориентированные программы подобны кирпичным домам - их строят постепенно, кирпич за кирпичом. Кирпичи в таком здании - это так называемые объекты (не субъекты и всякого рода странные типы ;-)). Главное отличие объектов и объектного программирования заключается в том, что объект представляет собой не только код - процедуры и функции, но и данные, с которыми они работают. Два в одном. Но не шампунь. ;-) Например, на C++ (объектно-ориентированном расширении стандартного модульного C) объекты выглядят приблизительно вот так:
class Descendant
{
private:
char *Name;
void far *Data;
public:
Descendant();
~Descendant();
DoSomeBussiness;
};
Это довольно оригинальное решение и, на самом деле, весьма практичное. Ну, во-первых, несколько разных программистов могут писать одну программу по частям, абсолютно ничего не зная друг о друге, но зная, что у каждого объекта должны быть определенные функции. Например, объект Mouse должен иметь функцию определения, была ли нажата кнопка мыши, каковы мышиные координаты и т.д. А во-вторых, может понадобиться описать не просто мышку, а какую-нибудь навороченную с гироскопами (эта мыша прямо на палец надевается - рулезная штучка, только руки устают ее держать на весу, хоть и маленькая ;-)). И вместо того, чтобы переписывать весь код заново (особенно те участки, которые мало или совсем не изменились), можно создать еще один объект (его называют объектом-потомком), который будет обладать всеми полями данных и процедурами их обработки уже существующего объекта-предка и несколькими новыми процедурами/полями. То есть примерно так:
class Offspring: public Descendant
{
private:
void far *myCoolData;
public:
CrackerInterneta;
};
Объект Offspring (потомок) имеет, кроме явно описанных CrackerInterneta ;-) и myCoolData, также поля и процедуры объекта Descendant (предка). Кроме того, ненужные или старые процедуры можно переписывать/замещать точно так же. Это позволяет писать код, что называется, на века. И очень быстро.