Язык программирования C++ для профессионалов
d51f8a0c

Язык программирования C++ для профессионалов

С++ является языком программирования общего назначения. Естественная для него область применения - системное программирование, понимаемое в широком смысле этого слова. Кроме того, С++ успешно используется во многих областях приложения, далеко выходящих за указанные рамки. Реализации С++ теперь есть на всех машинах, начиная с самых скромных микрокомпьютеров - до самых больших супер-ЭВМ, и практически для всех операционных систем. Поэтому книга дает лишь описание собственно языка, не объясняя особенности конкретных реализаций, среды программирования или библиотек.
Читатель найдет в книге много примеров с классами, которые, несмотря на несомненную пользу, можно считать игрушечными. Такой стиль изложения позволяет лучше выделить основные понятия и полезные приемы, тогда как в настоящих, законченных программах они были бы скрыты массой деталей. Для большинства предложенных здесь классов, как то связанные списки, массивы, строки символов, матрицы, графические классы, ассоциативные массивы и т.д., - приводятся версии "со 100% гарантией" надежности и правильности, полученные на основе классов из самых разных коммерческих и некоммерческих программ. Многие из "промышленных" классов и библиотек получились как прямые или косвенные потомки игрушечных классов, приводимых здесь как примеры.

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

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

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

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

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

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

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

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

Простой шаблон типа
Одним из самых полезных видов классов является контейнерный класс, т.е. такой класс, который хранит объекты каких-то других типов. Списки, массивы, ассоциативные массивы и множества - все это контейнерные классы. С помощью описанных в лекциях 5 и 7 средств можно определить класс, как контейнер объектов единственного, известного типа. Например, в §5.3.2 определяется множество целых.

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

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

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

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

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



Самоучитель по Computer Network The Hands

У вас дома два компьютера? К одному подключен принтер, и вам приходится бегать с дискетой, чтобы распечатать документ, подготовленный на другом компьютере? Или вы хотите сражаться с друзьями в любимые компьютерные игры? А может быть, вам нужно работать в Интернете, но у вас нет модема, а у ближайшего соседа есть?..
Решение очевидно — ведь сегодня уже никому не нужно объяснять, насколько эффективнее можно использовать имеющиеся в распоряжении компьютеры и периферийные устройства, если объединить оборудование в локальную сеть!

Предисловие
Вы найдете: описание основ организации сети Ethernet с использованием коаксиального кабеля и витой пары; описания и характеристики основных типов кабелей; определение и описание основных типов топологии сети; объяснение принципов настройки и эксплуатации оборудования и программного обеспечения. Кроме того, вы получите множество полезных практических советов по организации и прокладке локальных сетей Ethernet.

Общие сведения о локальных сетях
Непосредственный доступ к Интернету подразумевает использование самого полного спектра услуг глобальной сети. Локальная сеть, имеющая непосредственный доступ, фактически может пользоваться Сетью с высокой скоростью и высокой эффективностью постоянно, то есть круглые сутки и в непрерывном режиме. Как уже упоминалось ранее, Интернет — это сеть, состоящая из множества локальных сетей.

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

Архитектура сетей Ethernet
В рамках этой книги мы рассмотрим локальные сети, созданные с использованием наиболее популярной и распространенной в наши дни технологии — Ethernet. Данная технология появилась в 70-е годы XX века, когда инженер-исследователь из Массачусетского технологического института Билл Меткалф, сотрудничавший также с исследовательским центром компании Xerox в г. Пало-Альто, подготовил докторскую диссертацию, посвященную методикам организации компьютерных коммуникаций.

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

Прокладывание локальной сети
Постепенно мы подошли к одному из наиболее интересных разделов нашего «Самоучителя» — к разделу, посвященному прокладыванию и компоновке локальной сети. В настоящей главе мы рассмотрим два наиболее распространенных класса локальных сетей: 10Base2 и 10BaseT, а также обсудим ряд особенностей их монтажа.

Настройка локальной сети
Поскольку домашние локальные сети создаются обычно на основе двух компьютеров, один из которых, как правило, имеет более старую, а другой -более современную конфигурацию, необходимо рассмотреть принципы настройки локальной сети для нескольких различных операционных систем. И если одна из подключенных к локальной сети машин будет более совершенна по отношению к другой, вполне вероятно, что на ней будет установлена ОС Microsoft Windows XP.

Совместное использование Интернета
Одно из основных преимуществ локальной сети — это возможность совместного использования на всех сетевых компьютерах доступа в Интернет через один из узлов, который оснащен модемом либо подключен ко Всемирной Сети через высокоскоростное соединение, например, соединение ADSL или ISDN. Для этих целей используется специальное программное обеспечение, позволяющее после предварительной настройки обращаться к ресурсам Интернета через единственное подключение

Краткие сведения о беспроводных технологиях
В этой главе мы кратко рассмотрим основные технологии передачи данных в беспроводных локальных сетях. В настоящее время беспроводные технологии становятся все более доступными и понемногу получают значительное распространение среди прочих способов передачи данных между нескольким объединенными в вычислительную систему компьютерами.

Драйверы внешних устройств
Драйвер (driver) представляет собой специализированный программный модуль, управляющий внешним устройством. Слово driver происходит от глагола to drive (вести) и переводится с английского языка как извозчик или шофер: тот, кто ведет транспортное средство. Драйверы обеспечивают единый интерфейс для доступа к различным устройствам, тем самым устраняя зависимость пользовательских программ и ядра ОС от особенностей аппаратуры.

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

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

Глоссарий
1000BaseT (Gigabit Ethernet) - один из классов сетей Ethernet. Обеспечивает скорость передачи данных до 1000 Мбит/с (1 Гбит/с). В архитектуре сетей 1000BaseT используется топология «звезда» на базе высококачественного кабеля «витая пара» категории 5, в котором задействованы все восемь жил, причем каждая из четырех пар проводников используется как для приема, так и для передачи информации.