Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lection_cratco.doc
Скачиваний:
2
Добавлен:
08.11.2019
Размер:
119.3 Кб
Скачать
  1. Все есть объект. Объект можно воспринимать как особенную переменную, которая не только хранит данные, но и к которой можно сделать запрос – задание на выполнение каких-либо действий.

  2. Программа – это набор взаимодействующих между собой объектов, которые «говорят» друг другу, что надо сделать, посылая сообщения. Сообщение одного объекта – это по существу запрос на вызов функции, которая принадлежит другому объекту (в ООП вместо понятия «функция» используется понятие «метод»).

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

  4. Каждый объект характеризуется типом и является экземпляром класса. Понятие «класс» - синоним понятия «тип». Т.к. класс описывает набор объектов, которые имеют идентичные характеристики (элементы данных) и черты поведения (функциональность), класс реально является типом данных. Классы различаются прежде всего видами сообщений, которые можно посылать объектам конкретного класса.

  5. Все объекты определенного типа могут принимать одинаковые сообщения.

Итак, объекты взаимодействуют с помощью сообщений. Выполнение работы объектами начинается после получения ими сообщения.

Сообщение состоит из четырех частей:

• идентификатор получателя;

• кода, который должен быть выполнен получателем – т.е. обращение к методу (функции) получателя;

• аргументами для этого метода;

• возвращаемого отправителю значения.

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

Определение (формирование) класса.

Исторически сложилось, что большинство ООЯ используют ключевое слово class, которое по существу означает: «говорю, как выглядит новый тип объекта и что он может делать». За ключевым словом class следует имя нового типа объектов. Например, class Name {/* тело класса */}. После того, как создан класс, пользуясь этим новым типом данных, можно создать столько объектов (экземпляров класса), сколько требуется в программе. Для этого достаточно использовать специальную операцию new – операцию вызова конструктора класса:

Name Оbj_1 = new Name(); Name Оbj_2 = new Name();…

Сравните с синтаксической формой оператора объявления переменных в языке С, например, < тип> < имя переменной >; При таком объявлении переменная является статической и память под нее выделяется на этапе компиляции. При выделении памя-ти под динамические объекты в том же языке С используются специальные функции (malloc, calloc, realloc) и память выделяется в специальной области (heap - куча). В языках ООП конструкция типа Name Оbj_1 = new Name(); приводит к выделению памяти под объект Оbj_1 именно в «куче» и переменная-имя объекта является ссылкой на него.

Рассмотрим тело класса. В любой класс можно поместить 2 типа элементов (членов): элементы-данные (иногда их называют полями) и элементы-методы (в ПП - функции). Члены-данные – это объекты любого типа:

  • предопределенные (другое название встроенные, т.к. в стандарте они обозначе-ны термином Built_In) (в частности, базовые: числовые, логические и символьные);

  • библиотечные – классы библиотеки из .NET Framework;

  • пользовательские.

Простейший пример класса только с членами-данными.

class DataOnly {int I; float F; bool B;}. Этот класс делать ничего не умеет, но создать экземпляр класса можно: DataOnly DA = new DataOnly();

Можно присвоить значение любому члену этого класса. Но в программе это может сделать только некий существующий объект программы, причем правильно обратившись к соответствующему полю объекта DA.

Можно предположить, что это осуществляется оператором присваивания, причем в левой его части записывается выражение, состоящей из переменной-имени объекта (ссылки на объект), разделителя – точки и имени члена объекта, например: DA.I = 47; DA.F = 12.4; DA.B = false;

Однако такая запись приведет к ошибке, т.к.

Напрямую присвоить значения полей нельзя, если класс задан так, то у полей по умолчанию уровень доступа private, а это значит, что обратиться к ним можно только изнутри класса. Чтобы работало присваивание DA.I = 47; нужно, чтобы класс был задан так public class DataOnly {public int I; public float F; public bool B;}

Но так делать не рекомендуется, исходя из принципа инкапсуляции.

Класс DataOnly не может делать ничего, кроме хранения данных, потому что он не имеет членов-методов. Правильное получение/установка значения поля возможно с использованием свойств (предпочтительный способ для С#). Свойства - это тоже члены класса. Полный перечень членов класса:

  • данные класса (поля, константы, события);

  • код, который оперирует с этими данными (методы, конструкторы, деструкторы, индексаторы, операторы, делегаты и свойства).

Правила (при работе с методами).

1. Методы могут создаваться только как члены класса.

2. Метод может быть вызван только для объекта (или класса), а этот объект должен быть способен выполнить этот вызов метода.

3. Метод вызывается по имени объекта (или класса), за которым следует разделитель – точка, далее следует имя метода и список аргументов. Список аргументов формируется по тем же правилам, которые действуют для функций в ПП. Правило о возвращаемом функцией значении, существующее в ПП, распространяется и на значение, возвращаемое методом в ООП. Попытка вызвать «неправильный» для объекта метод приводит к ошибке компиляции.

Следует обратить внимание на то, что Метод вызывается или по имени объекта или по имени класса, но по имени класса не всегда, а только в тех случаях, когда метод создается с ключевым словом static, т.е. является статическим. Статические данные и методы класса, заданные с помощью ключевого слова static, не привязаны к конкретному экземпляру объекта класса: они одинаковы для всех объектов данного класса, т.е. для всех объектов данного класса существует только один участок памяти для статических данных и методов. Именно поэтому для обращения к статическим методам (а в библиотечных классах методы, предназначенные для общего пользования всегда статические) и не требуется создание соответствующего объекта

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

Простым примером служит представление электрической лампочки.

Имя класса

Light

Интерфейс

on() {}

off() {}

brighten() {}

dim() {}

Создание объекта Lt: Light Lt = new Light(); Отправка запроса на включение: Lt.on();

Простейшая программа на языке C#.

Каждая программа на языке C# активно использует библиотечные классы. Именно через них программе доступно то окружение, в котором она выполняется. Например, библиотечный класс Console предоставляет программе средства для организации консольного диалога с пользователем.

Применение в программе библиотечных классов предполагает либо создание объектов этих классов, либо обращение к статическим полям и методам библиотечных классов.

В примере простейшей программы только один класс с одним методом Main() и используются только статические методы библиотечных классов. При таких ограниче-ниях программирование на языке C# превращается в ПП с особым синтаксисом – главным образом, связанным с обращением к методам библиотечных классов. Программа выводит на экран фразу «Введите Ваше имя», считывает введенное пользователем с клавиатуры имя и затем приветствует его по имени.

class helloUser

{ static void Main()

{ string name;

System. Console.WriteLine("Введите Ваше имя");

name = System. Console.ReadLine();

System. Console.WriteLine(“Приветствую Вас!” + name + “!”);

}

}

В отличие от языка С в языке C# предусмотрен предопределенный тип string (System.string) для представления строк.

System. Console.WriteLine("Введите Ваше имя"); - это обращение к статическому методу WriteLine() библиотечного класса Console, который отнесен к пространству имен (namespace) System. Метод WriteLine() выводит значение своего аргумента в консольное окно. При втором обращении к этому методу аргументом служит конкатенация трех строк – это тоже отличие синтаксиса языка C# от языка С. Метод ReadLine() не имеет аргументов, но в отличие от WriteLine() у него есть возвращаемое значение – строка символов, прочитанная из стандартного входного потока консоли. Причем метод выполняется только после нажатия на клавишу ENTER.

Пространство имен.

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

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

Опр_4. Пространство имен определяет декларативную область, которая позволяет отдельно хранить множества имен. По существу имена, объявленные в одном пространстве имен, не будут конфликтовать с такими же именами, объявленными в другом пространстве.

Каждая программа на языке C# может использовать либо свое собственное пространство имен, либо размещает свои имена в пространстве, предоставляемом программе по умолчанию. Если программа использует методы библиотечных классов из некого «ПРОСТРАНСТВА ИМЕН», например, называемого space_of_names, то можно упростить составные имена, используя в начале программы (т.е. до определения классов программы), специальный оператор using space_of_names; Использование такого оператора позволяет при вызове статистического метода из библиотечного класса указанного пространства имен ограничиться выражением, составленным только из имени класса и имени метода, разделенными точкой.

Т.е. если в рассмотренном примере перед описанием класса поместить оператор

using System; , то обращаться к методам WriteLine() и ReadLine() можно с помощью сокращенных составных имен и программа может упроститься следующим образом:

using System;

class helloUser

{ static void Main()

{ string name;

Console.WriteLine("Введите Ваше имя"); name = Console.ReadLine();

Console.WriteLine(“Приветствую Вас!” + name + “!”);

}

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]