1629295407-c61bfe4caba98380ea3e7cdae6295416 (846200), страница 6
Текст из файла (страница 6)
В результатепоявился более совершенный способ организации программы. Если говорить в самыхобщих чертах, программу можно организовать одним из двух способов: опираясь либо накод (т.е. на действия, или на то, что происходит в программе), либо на данные (т.е. на то,что подвергается определенному воздействию). При использовании исключительнометодов структурного программирования программы обычно организовывались с опоройна действия. Такой подход можно представить себе в виде кода, воздействующего наданные.Глава 2.
Обзор элементов языка C#31Объектно-ориентированные программы работают совсем по-другому. Ониорганизованы вокруг данных, а ключевой принцип такой организации гласит: именноданные должны управлять доступом к коду. В объектно-ориентированном языкепрограммист определяет данные и код, который разрешен для выполнения действий надэтими данными. Таким образом, тип данных точно определяет операции, которые могутбыть к ним применены.Для поддержки принципов объектно-ориентированного программирования все ООПязыки, включая C#, имеют три характерных черты: инкапсуляцию, полиморфизм инаследование.ИнкапсуляцияИнкапсуляция — это механизм программирования, который связывает код (действия)и данные, которыми он манипулирует, и при этом предохраняет их от вмешательства извнеи неправильного использования.
В объектно-ориентированном языке код и данные можносвязать таким образом, что будет создан автономный черный ящик. Внутри этого ящиканаходятся все необходимые данные и код. При таком связывании кода и данных создаетсяобъект. Другими словами, объект — это элемент, который поддерживает инкапсуляцию.Код, данные или обе эти составляющие объекта могут быть закрытыми внутри негоили открытыми. Закрытый код или закрытые данные известны лишь остальной части этогообъекта и доступны только ей. Это означает, что к закрытому коду или данным не можетполучить доступ никакая другая часть программы, существующая вне этого объекта. Есликод или данные являются открытыми, к ним (несмотря на то, что они определены внутриобъекта) могут получить доступ другие части программы. Как правило, открытые частиобъекта используются для обеспечения управляемого интерфейса с закрытыми элементами.Основной единицей инкапсуляции в C# является класс. Класс определяет формуобъекта.
Он задает как данные, так и код, который будет оперировать этими данными. В C#класс используется для создания объектов. Объекты — это экземпляры класса. Такимобразом, класс — это по сути набор шаблонных элементов, которые показывают, какпостроить объект.Код и данные, которые составляют класс, называются членами класса. Данные,определенные в классе, называются переменными экземпляра (instance variable), а код,который оперирует этими данными, — методами-членами (member method), или простометодами. “Метод” — это термин, применяемый в C# для обозначения подпрограммы. Есливы знакомы с языками C или C++, то, вероятно, догадываетесь о том, что то, что C#программист называет методом, C/C++-программист назовет функцией.
А поскольку C# —прямой потомок C++, термин “функция” также приемлемо использовать, когда речь идет оC#-методе.ПолиморфизмПолиморфизм (от греческого слова polymorphism, означающего “много форм”) — этокачество, которое позволяет одному интерфейсу получать доступ к целому классу действий.Простым примером полиморфизма может послужить руль автомобиля. Руль (интерфейс)остается рулем независимо от того, какой тип рулевого механизма используется вавтомобиле.
Другими словами, руль работает одинаково в любом случае: оснащен ли вашавтомобиль рулевым управлением прямого действия, рулевым управлением с усилителемили реечным управлением. Таким образом, поворот руля влево заставит автомобильпоехать влево независимо от типа используемого в нем рулевого управления. Достоинствотакого единообразного интерфейса состоит, безусловно, в том, что, если вы знаете, какобращаться с рулем, вы сможете водить автомобиль любого типа.32Часть I. Язык C#Тот же принцип можно применить и к программированию. Рассмотрим, например,стек (stack), т.е. область памяти, функционирующую по принципу “последним пришел —первым обслужен”.
Предположим, вы пишете программу, для которой нужно организоватьтри различных типа стека. Один стек предназначен для целочисленных значений, второй —для значений с плавающей точкой, а третий — для символов. В этом случае для реализациикаждого стека используется один и тот же алгоритм, несмотря на различие в типахсохраняемых данных. В случае не объектно-ориентированного языка вам пришлось бысоздать три набора “стековых” подпрограмм, имеющих различные имена.
Но благодаряполиморфизму в среде C# можно создать один общий набор “стековых” подпрограмм,который обрабатывает все три типа стека. Иными словами, зная, как использовать одинстек, можно использовать все остальные.Концепцию полиморфизма часто выражают такой фразой: “один интерфейс — многометодов”. Это означает, что для выполнения группы подобных действий можно разработатьобщий интерфейс.
Полиморфизм позволяет понизить степень сложности программы,предоставляя программисту возможность использовать один и тот же интерфейс длязадания общего класса действий. Конкретное (нужное в том или ином случае) действие(метод) выбирается компилятором. Программисту нет необходимости делать это вручную.Его задача — правильно использовать общий интерфейс.НаследованиеНаследование — это процесс, благодаря которому один объект может приобретатьсвойства другого. Благодаря наследованию поддерживается концепция иерархическойклассификации.
В виде управляемой иерархической (нисходящей) классификацииорганизуется большинство областей знаний. Например, яблоки Красный Делишес являютсячастью классификации яблоки, которая в свою очередь является частью класса фрукты, атот — частью еще большего класса пища. Таким образом, класс пища обладаетопределенными качествами (съедобность, питательность и пр.), которые применимы и кподклассу фрукты. Помимо этих качеств, класс фрукты имеет специфическиехарактеристики (сочность, сладость и пр.), которые отличают их от других пищевыхпродуктов. В классе яблоки определяются качества, специфичные для яблок (растут надеревьях, не тропические и пр.). Класс Красный Делишес наследует качества всехпредыдущих классов и при этом определяет качества, которые являются уникальными дляэтого сорта яблок.Если не использовать иерархическое представление признаков, для каждого объектапришлось бы в явной форме определить все присущие ему характеристики.
Но благодарянаследованию объекту нужно доопределить только те качества, которые делают егоуникальным внутри его класса, поскольку он (объект) наследует общие атрибуты своегородителя. Следовательно, именно механизм наследования позволяет одному объектупредставлять конкретный экземпляр более общего класса.Первая простая программа/**/Настало время рассмотреть реальную C#-программу.Это простая C#-программа.Назовем ее Example.cs.Глава 2. Обзор элементов языка C#33using System;class Example {}// Любая C#-программа начинается с вызова метода Main().public static void Main() {Console.WriteLine("Простая C#-программа.");}На момент написания этой книги единственной доступной средой разработки C#программ была Visual Studio .NET. Эта среда позволяет отредактировать, скомпилировать ивыполнить C#-программу, причем это можно сделать двумя способами: с помощьюкомпилятора командной строки csc.exe или интегрированной среды разработки(Integrated Development Environment — IDE).
Здесь описаны оба способа. (Если выиспользуете иной компилятор, следуйте инструкциям, приведенным в сопроводительнойдокументации.)Использование компилятора командной строки csc.exeНесмотря на то что в случае коммерческих проектов вы, по всей вероятности, будетеработать в интегрированной среде разработки Visual Studio, использование C#-компиляторакомандной строки — самый простой способ скомпилировать и выполнить примерыпрограмм, приведенные в этой книге.
Для создания и запуска программ с помощью C#компилятора командной строки необходимо выполнить следующие действия.1. Ввести текст программы, используя любой текстовый редактор.2. Скомпилировать программу.3. Выполнить программу.Ввод текста программыПрограммы, представленные в этой книге, можно загрузить с Web-сайта компанииOsborne с адресом: www.osborne.com. Но при желании вы можете ввести текст программвручную.
В этом случае необходимо использовать какой-нибудь текстовый редактор,например Notepad. Однако помните, что при вводе текста программ должны быть созданыисключительно текстовые файлы, а не файлы с форматированием, используемым притекстовой обработке, поскольку информация о форматировании помешает работе C#компилятора. Введя текст приведенной выше программы, назовите соответствующий файлExample.cs.Компилирование программыЧтобы скомпилировать программу, запустите C#-компилятор, csc.exe, указав вкомандной строке имя исходного файла.C:\>csc Example.csКомпилятор csc создаст файл с именем Example.exe, который будет содержатьMSIL-версию этой программы.
Хотя MSIL-код не является выполняемым, тем не менее онсодержится в ехе-файле. При попытке выполнить файл Example.ехе система CommonLanguage Runtime автоматически вызовет JIT-компилятор. Однако имейте в виду: если выпопытаетесь выполнить Example.ехе (или любой другой ехе-файл, содержащий MSILкод) на компьютере, в котором не установлена среда .NET Framework, программавыполнена не будет ввиду отсутствия системы CLR.34Часть I. Язык C#На заметкуПеред запуском компилятора csc.ехе вам, возможно, придется выполнитьпакетный файл vcvars32.bat, который обычно расположен в папке//Program Files/Microsoft Visual Studio.NET/Vc7/Bin.