Бьерн Страуструп. Язык программирования С++ Второе дополненное издание



Pdf көрінісі
бет226/256
Дата11.07.2022
өлшемі2,87 Mb.
#37591
1   ...   222   223   224   225   226   227   228   229   ...   256
12.1.4 Гибридный проект 
Переход на новые методы работы может быть мучителен для любой организации. Раскол внутри нее и 
расхождения между сотрудниками могут быть значительными. Но резкий решительный переход, 
способный в одночасье превратить эффективных и квалифицированных сторонников "старой школы" в 
неэффективных новичков "новой школы" обычно неприемлем. В то же время, нельзя достичь больших 
высот без изменений, а значительные изменения обычно связаны с риском. 
Язык С++ создавался с целью сократить такой риск за счет постепенного введения новых методов. Хотя 
очевидно, что наибольшие преимущества при использовании С++ достигаются за счет абстракции 


Бьерн Страуструп.
Язык программирования С++ 
 
313 
данных, объектно-ориентированного программирования и объектно-ориентированного проектирования, 
совершенно неочевидно, что быстрее всего достичь этого можно решительным разрывом с прошлым. 
Вряд ли такой явный разрыв будет возможен, обычно стремление к усовершенствованиям 
сдерживается или должно сдерживаться, чтобы переход к ним был управляемым. Нужно учитывать 
следующее: 

Разработчикам и программистам требуется время для овладения новыми методами. 

Новые программы должны взаимодействовать со старыми программами. 

Старые программы нужно сопровождать (часто бесконечно). 

Работа по текущим проектам и программам должна быть выполнена в срок. 

Средства, рассчитанные на новые методы, нужно адаптировать к локальному окружению. 
Здесь рассматриваются как раз ситуации, связанные с перечисленными требованиями. Легко 
недооценить два первых требования. 
Поскольку в С++ возможны несколько схем программирования, язык допускает постепенный переход на 
него, используя следующие преимущества такого перехода: 

Изучая С++, программисты могут продолжать работать. 

В окружении, бедном на программные средства, использование С++ может принести 
значительные выгоды. 

Программы, написанные на С++, могут хорошо взаимодействовать с программами
написанными на С или других традиционных языках. 

Язык имеет большое подмножество, совместимое с С. 
Идея заключается в постепенном переходе программиста с традиционного языка на С++: вначале он 
программирует на С++ в традиционном процедурном стиле, затем с помощью методов абстракции 
данных, и наконец, когда овладеет языком и связанными с ним средствами, полностью переходит на 
объектно-ориентированное программирование. Заметим, что хорошо спроектированную библиотеку 
использовать намного проще, чем проектировать и реализовывать, поэтому даже с первых своих шагов 
новичок может получить преимущества, используя более развитые средства С++. 
Идея постепенного, пошагового овладения С++, а также возможность смешивать программы на С++ с 
программами, написанными на языках, не имеющих средств абстракции данных и объектно-
ориентированного программирования, естественно приводит к проекту, имеющему гибридный стиль. 
Большинство интерфейсов можно пока оставить на процедурном уровне, поскольку что-либо более 
сложное не принесет немедленного выигрыша. Например, обращение к стандартной библиотеке math 
из С определяется на С++ так: 
extern "C" { 
#include 
 

и стандартные математические функции из библиотеки можно использовать так же, как и в С. Для всех 
основных библиотек такое включение должно быть сделано теми, кто поставляет библиотеки, так что 
программист на С++ даже не будет знать, на каком языке реализована библиотечная функция. 
Использование библиотек, написанных на таких языках как С, является первым и вначале самым 
важным способом повторного использования на С++. 
На следующем шаге, когда станут необходимы более сложные приемы, средства, реализованные на 
таких языках как С или Фортран, представляются в виде классов за счет инкапсуляции структур данных 
и функций в интерфейс классов С++. Простым примером введения более высокого семантического 
уровня за счет перехода от уровня процедур плюс структур данных к уровню абстракции данных может 
служить класс строк из $$7.6. Здесь за счет инкапсуляции символьных строк и стандартных строковых 
функций С получается новый строковый тип, который гораздо проще использовать. 
Подобным образом можно включить в иерархию классов любой встроенный или отдельно 
определенный тип. Например, тип int можно включить в иерархию классов так: 
class Int : public My_object { 


Бьерн Страуструп.
Язык программирования С++ 
 
314 
int 
i; 
public: 
// definition of operations 
// see exercises [8]-[11] in section 7.14 for ideas 
// определения операций получаются в упражнениях [8]-[11] 
// за идеями обратитесь к разделу 7.14 
}; 
Так следует делать, если действительно есть потребность включить такие типы в иерархию. 
Обратно, классы С++ можно представить в программе на С или Фортране как функции и структуры 
данных. Например: 
class myclass { 
// 
representation 
public: 
void 
f(); 
T1 
g(T2); 
// 
... 
}; 
extern "C" { // map myclass into C callable functions: 
void myclass_f(myclass* p) { p->f(); } 
T1 myclass_g(myclass* p, T2 a) { return p->g(a); } 
// 
... 
}; 
В С-программе следует определить эти функции в заголовочном файле следующим образом: 
// in C header file 
extern void myclass_f(struct myclass*); 
extern T1 myclass_g(struct myclass*, T2); 
Такой подход позволяет разработчику на С++, если у него уже есть запас программ, написанных на 
языках, в которых отсутствуют понятия абстракции данных и иерархии классов, постепенно 
приобщаться к этим понятиям, даже при том требовании, что окончательную версии программы можно 
будет вызывать из традиционных процедурных языков. 


Достарыңызбен бөлісу:
1   ...   222   223   224   225   226   227   228   229   ...   256




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет