Программирование >>  Процедурные приложения 

1 ... 15 16 17 [ 18 ] 19 20 21 ... 150


встречаться выражения, тип результата которых неясен или трудно определим. Если бы С требовал однозначного определения типа данных, то это устранило бы появление побочных эффектов и неожиданных результатов, но в то же время сильно уменьшило бы мощь языка, сведя его к обычному языку высокого уровня.

Ограниченные средства управления ходом выполнения программы

Вследствие того, что выполнение программ на языке С слабо контролируется, многие их недостатки могут остаться незамеченными. Например, во Время выполнения программы не поступит никаких предупреждающих сообщений, если осуществлен выход за границы массива. Это та цена, которую пришлось заплатить за упрощение компилятора ради его быстроты и эффективности использования памяти.

Язык С - не для любителей!

Огромный набор предоставляемых возможностей - от побитового управления данными до форматированного ввода/вывода, а также относительная независимость и стабильность выполнения программ на разных машинах сделали язык С чрезвычайно популярным в среде программистов. Во многом благодаря тому, что операционная система UNIX была написана на языке С, она получила такое широкое распространение во всем мире и используется на самых разных компьютерах.

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

Стандарт ANSI С

Специальный комитет Американского института национальных стандартов (ANSI) занимался разработкой стандартов языка С. Давайте рассмотрим, какие изменения были предложены и внесены в язык программирования в результате работы этого комитета. Основные цели внесения изменений заключались в том, чтобы повысить гибкость языка и стандартизировать предлагаемые различными компиляторами возможности.

Ранее единственным стандартом языка С была книга Б. Кернигана и Д. Ритчи Язык программирования С (изд-во PrenticeHall, 1978 г.). Но эта книга не опускалась до описания отдельных технических деталей языка, что не гарантировало стандартности компиляторов С, создаваемых разными фирмами. Стандарт ANSIдолжен был устранить эту неоднозначность. Хотя некоторые из предложенных изменений могли привести к возникновению проблем при выполнении ранее написанных программ, ожидалось, что негативный эффект не будет существенным.

Введение стандарта ANSI должно было в еще большей степени, чем раньше, обеспечить совместимость языка С с различными компьютерными платформами. Хотя, конечно, внесенные изменения не смогли устранить всех противоречий, возникающих в процессе использования С-программ на разных компьютерах. По-прежнему в большинстве случаев, чтобы эффективно использовать имеющуюся программу на компьютере с другой архитектурой, в программный код должны быть внесены некоторые изменения.

Комитет ANSI также подготовил ряд положений в виде меморандума, которые выражали дух языка С . Вот некоторые из этих положений.

Доверяйте программистам

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

Язык должен оставаться компактным и простым.

В дополнение были предприняты усилия для того, чтобы обеспечить соответствие стандарта ANSI (американского) стандарту, предложенному ISO (InternationalStandardOrganization - Международная организация по стандартизации). Благодаря этим усилиям язык С оказался, пожалуй, единственным языком программирования, который эффективно применяется в разноязычных средах с различными кодовыми таблицами. В табл. 4.1. перечислены некоторые аспекты языка С, стандартизированные комитетом ANSI.



Таблица 4.1. Рекомендации

комитета ANSI разработчикам компиляторов языка С

Аспект

Предложенные стандарты

Типы данных

Четыре: символьный, целочисленный, с плавающей запятой и перечисление

Комментарии

/ * - начало, * / - конец; добавлен - It:любой набор символов в строке справа будет игнорироваться компилятором

Длина идентификатора

31 символ; этого достаточно для обеспечения уникальности идентификатора

Стандартные идентификаторы и файлы заголовков

Разработан минимальный набор идентификаторов и файлов заголовков, необходимый для осуществления базовых операций, например ввода/вывода

Директивы препроцессора

Значку #, с которого начинается директива препроцессора, может предшествовать отступ (любая комбинация пробелов и символов табуляции), помогающий отличить директиву от остального программного кода; в некоторых ранних компиляторах существовало требование помещать директивы препроцессора только начиная с первой позиции строки

Новые директивы препроцессора

Определена конструкция if условие (выражение) #elif (выражение)

Запись выражений в несколько строк

Комитет принял решение, что смежные литералы должны объединяться; таким образом, выражение с оператором #define может быть записано в две строки

Стандартные библиотеки

В предложенном стандарте ANSI определен базовый набор внешних и системных функций, таких как read () и write ()

Управление выводом

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

Ключевые слова

Был согласован минимальный набор ключевых слов, необходимых для построения работоспособных выражений на языке С

size of()

Комитет пришел к выводу, что оператор sizeof () должен возвращать значение типа size t вместо системно-зависимой целочисленной переменной

Прототипы функций

Комитет постановил, что все компиляторы языка С должны поддерживать программы, как использующие, так и не использующие прототипы функций

Аргументы командной строки

Был согласован и утвержден единый синтаксис использования аргументов командной строки

Тип данных void

Ключевое слово void может использоваться в функциях, не возвращающих значения; для функции, возвращающей значение, результат может быть приведен к типу void: это служит указанием компилятору, что возвращаемое значение умышленно игнорируется

Использование структур

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

Объявления функций

Объявление функции может включать список типов аргументов, на основании которого компилятор определяет число и тип аргументов

Шестнадцатеричные числа

Шестнадцатеричное число должно начинаться с обозначения \х, за которым следует несколько шестнадцатеричных цифр (0-9, a-f, A-F); например, десятичному числу 16 соответствует Шестнадцатеричное \х!0 (допускается также запись 0x10)

Триграммы

Триграммами называются последовательности символов, которые представляют клавиши, отсутствующие в некоторых клавиатурах; например, комбинацию символов ??<можно использовать вместо символа (

Переход от С к C++ и объектно-ориентированному программированию

Язык C++ можно рассматривать как надмножество для языка С. C++ сохранил все возможности, предоставляемые языком С, дополнив их средствами объектно-ориентированного программирования. Он позволяет решать задачи на достаточно высоком уровне абстракции, превосходя в этом отношении даже язык Ada, поддерживает модульное программирование, как в Modula-2, но сохраняет при этом простоту, компактность и эффективность языка С.

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



Из истории языка C++

Вряд ли вас удивит тот факт, что своими корнями C++ восходит к языку С. В то же время C++ впитал в себя многие идеи, реализованные не только в языках BCPLи Algol 60, но и в Simula 67. Возможность перегрузки операторов и объявления переменных непосредственно перед их первым использованием сближает C++ с языком Algol 60. Концепция подклассов (или производных классов) и виртуальных функций была заимствована из Simula 67. Впрочем, все популярные языки программирования представляют собой набор усовершенствованных средств и функций, взятых из других, более ранних языков программирования. Но, безусловно, ближе всего язык C++ стоит к языку С.

Язык C++ был разработан в начале 80-х в BellLabs Бьярном Страуструпом (BjarneStroustrup). Сам доктор Страуструп утверждает, что название C++ было предложено Риком Масситти (RickMascitti). C++ изначально был создан для целей разработки некоторых высокоточных событийных моделей, поскольку необходимая эффективность не могла быть достигнута с помощью других языков программирования.

Впервые C++ был использован вне стен лаборатории доктора Страуструпа в 1983 г., но еще до лета 1987 г. шли работы по отладке и совершенствованию этого языка.

При создании языка C++ особое внимание уделялось сохранению совместимости с языком С. Необходимо было сохранить работоспособность миллионов строк программных кодов, написанных и скомпилированных на С, а также сохранить доступ ко множеству разработанных библиотек функций и средств программирования языка С. Надо отметить, что в этом направлении были достигнуты значительные успехи. Во всяком случае многие программисты утверждают, что преобразование программных кодов от С к C++ выполняется значительно проще, чем это происходило ранее, например, при переходе от FORTRAN к С.

С помощью C++ можно создавать широкомасштабные программные проекты. Благодаря тому, что в языке C++ усилен контроль за типами данных, удалось преодолеть многие побочные эффекты, характерные для языка С.

Но наиболее важным приобретением языка C++ все-таки является объектно-ориентированное программирование (ООП). Чтобы воспользоваться всеми преимуществами C++, вам придется изменить привычные подходы к решению проблем. Основной задачей теперь становится определение объектов и связанных с ними операций, а также формирование классов и подклассов.

Эффективность объектно-ориентированного подхода

Остановимся ненадолго на объектно-ориентированном программировании, чтобы на примере показать, как использование абстрактных объектов языка C++ может облегчить решение прикладных задач по сравнению с более старыми процедурными языками. Предположим, например, что нам нужно написать программу на языке FORTRAN для оперирования таблицей успеваемости студентов. Чтобы решить эту задачу, необходимо будет создать ряд массивов, представляющих различные поля таблицы. Все массивы должны быть связаны посредством общего индекса. Для создания таблицы из десяти полей необходимо запрограммировать доступ к десяти массивам с помощью единого индекса, чтобы данные из разных массивов возвращались как единая запись таблицы.

В C++ решение этой задачи сводится к объявлению простого объекта student database, способного принимать сообщения add student, delete student, access student и display student для оперирования данными, содержащимися в объекте. Обращение к объекту student database реализуется очень просто. Допустим, нужно добавить новую запись в таблицу. Для этого достаточно ввести в программу следующую строку:

student database . add student (new recruit)

В данном примере функция add student () является методом класса, связанного с объектом student database, а параметр new recruit представляет собой набор данных, добавляемый в таблицу. Обратите внимание на то, что класс объектов student database не является встроенным типом данных языка C++. Наоборот, мы расширили язык программирования собственными средствами, предназначенными для решения конкретной задачи. Возможность создавать новые классы или модифицировать существующие (порождать от них подклассы) позволяет программисту естественным образом устанавливать соответствие между понятиями предметной области и средствами языка программирования.

Незаметные различия между С и C++



1 ... 15 16 17 [ 18 ] 19 20 21 ... 150

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика