Все вокруг нас состоит из объектов…. Неделя информатики ВГПУ 2004 Технологии ООП Простые по функциям детали помогают создавать более сложные и т.д. Вместе они образуют такое понятие как ОБЪЕКТ Причем каждый из объектов также состоит объектов, но более мелких... Неделя информатики ВГПУ 2004 Технологии ООП Рассмотрим объект «Примитивный человек»: Голова Туловище Ноги С помощью глаз я могу видеть Руки Руками я могу хватать, держать, а также обороняться Могу ходить, бегать и прыгать Неделя информатики ВГПУ 2004 Технологии ООП Таким образом можно сказать, что примитивный человек состоит из неких частей и способов управлять ими. Части тела могут задаваться параметрами т.е. Некоторыми переменными! Размер головы=30 Дальнозоркость=200 Правая рука=занята Левая рука=занята Минимальная длинна передвижения=1 Скорость передвижения ног=5 Все это параметры человека Неделя информатики ВГПУ 2004 Технологии ООП Учитывая дальнозоркость Положения человека можно определить плоскости: область плоскости, которую x=5 видит и куда может человек y=3 пойти. Добавив к параметрам их обработку получаем человека, который может выполнять примитивные функции: ходьба, обзор пространства, взятие предмета и т.д. Неделя информатики ВГПУ 2004 Технологии ООП Параметры человека: Позиция_x=3; Позиция_y=4; Движется=false; Сила_правой_руки=10; Сила_левой_руки=6; Правая_рука_занята=true; Левая_река_занята=true; Дальнозоркость=200; Быстрота_шага=5; Жизненная_сила=100; Интеллект=0; Функциональные возможности: Осмотреться; Позиция_свободна(x,y); Передвинуться_на_позицию(x,y) Идти_вперед; Идти_назад; Идти_влево; Идти_вправо; Остановиться; Проверить_заняты_ли_руки; Взять_предмет(какой); Положить_предмет(какой); и т.д. Одни только свойства и навыки не могут наделить нашего человека интеллектом, поскольку он должен научиться ими управлять.Управлять ими он будет с помощью функций! Опишем возможные параметры человека с помощью переменных Неделя информатики ВГПУ 2004 Технологии ООП Функция Идти_вперед; Начало функции Если (Жизненная_сила<>0) то если (Позиция_свободна(x,y)=да) Начало блока x=x+Быстрота_шага; Идти_вперед:=да; конец блока; Иначе Начало блока Остановиться(); Идти_вперед:=нет; Конец блока; Выход из функции; Неделя информатики ВГПУ 2004 Таким образом, совмещение в одном объекте как свойств, так и действий над ними является базовым принципом объектноориентированного программирования (ООП) и называется ... Технологии ООП Можно сказать, что ИНКАПСУЛЯЦИЯ - это умение объекта использовать свои свойства. У меня есть особенности: Я могу сделать: Дальнозоркость = 100 шагам Сила левой руки = 10 Сила правой руки = 15 Скорость передвижения ног = 1 шаг в сек. Скорость бега = 3 шага в сек. Цвет кожи = красно розовый Волосы = есть Борода = есть Зубы = 30 Желание поесть = есть Желание поспать = нет Чувство жажды = нет Время жизни = 10000 часов Время с момента пробуждения = 10 часов Усталость = нет Место нахождение = (x=10,y=100) Неделя информатики ВГПУ 2004 Технологии ООП Кроме инкапсуляции существует еще две основополагающих концепции объектно-ориентированного программирования Так же как в реальной жизни у любого объекта могут быть потомки. Основой для потомка являются основные параметры и функции предка. К этим параметрам Хочу кушать. хочу учиться, добавляются некоторые свои, которые хочу разобраться добавляют новые возможности, навыки в новом языке программировани и «развивают» потомка. Могу видеть, слышать, могу говорить, философств овать и рисовать, шутить, петь. Могу видеть и слышать Хочу кушать Могу держать предметы Предок Могу ходить и бегать Неделя информатики ВГПУ 2004 Хочу кушать, хочу учиться я, хочу найти хорошую работу, хочу хорошую машину, хороший дом, красавицу жену, много денег, долго жить, не болеть, быть большим начальником. Хочу спать. Могу видеть, слышать, могу говорить, философствовать и рисовать, шутить и петь, программировать, изучать новые технологии, учить других, быть верным другом, смотреть телевизор, читать книги, играть в компьютерные игры Могу держать предметы Потомок Предок Могу ходить, бегать, прыгать и приседать Могу ходить, бегать, прыгать, приседать, танцевать, играть в футбол, ношу обувь Могу держать предметы, быстро печатать, работать в Internet, лепить из пластилина Потомок Технологии ООП Итак, наследование - это процесс, посредством которого один объект может приобретать свойства другого... Наследование передает основополагающие функции потомку, но не развивает их, но ведь одна и та же функция может также развиваться или вообще в коре отличаться от той же самой функции предка. Так, например, оба объекта обладают функцией зрения, но каждый из них воспринимает мир по своему. Неделя информатики ВГПУ 2004 Технологии ООП Чтобы видеть мир так же как его видят другие один из объектов может использовать дополнительные функции и свойства. Например, «носить очки». Иначе одна и та же функция у объектов будет различаться... В данном примере второй объект может быть дальтоником и тогда он также будет воспринимать мир иначе... Неделя информатики ВГПУ 2004 Технологии ООП Третья концепция объектно-ориентированного программирования гласит, что для для вещей которые реализуются разными способами можно применять одно название т.е. У всех есть функция «ЗРЕНИЕ», но реализуется она у каждого по разному! Данная особенность называется... Неделя информатики ВГПУ 2004 Технологии ООП Полиморфизм - свойство, которое позволяет одно и тоже имя использовать для решения двух или более схожих, но технически разных задач Полиморфизм, инкапсуляция и наследование позволяют нам определить определить новый тип данных, который будет описывать общее поведение и характеристики набора аналогичных друг другу объектов. Объект есть - экземпляр класса т.е. Переменная, тип которой является классом. Базовый класс (предок) Живое существо Наследует Потомок Живет на земле Живет под водой Наследует Потомок Человек Собака Ящерица Наследует Дельфин Окунь Краб Наследует Объект Иванов Иван Петрова Елена В Delphi классы обозначаются служебным словом CLASS, а в Pascal - OBJECT Рассмотрим пример описания объекта в Delphi.. Неделя информатики ВГПУ 2004 Технологии ООП Type man = class Класс - человек Private: ….. Его местонахождение на плоскости x,y:integer; Угрожает ли опасность? danger:boolean; Текущее настроение nastroenie:integer; Насколько далеко может видеть человек dalozorkost:integer; Сколько лет предначертано прожить life:integer; ….. Public: function Umer: boolean; Возвращает True если Life = 0 ….. function SkolkoMneLet:integer; function kakoeNastroenie:integer; function Where_x:integer; function Where_y:integer; end; Возвращает текущий возраст Какое настроение у человека Позиция x Позиция y Как вы знаете не все свойства человека, данные ему от природы можно узнать сразу, даже изучив его.. Так в объектно-ориентированном программировании некоторые функции является доступными только для внутреннего использования и не доступны никому, кроме самого человека Неделя информатики ВГПУ 2004 Технологии ООП Ключевое слово Private определяет поля и методы класса, которые недоступны вне класса. Public - определяет свойства и методы доступные любой части кода программы Protected - определяет частично доступные поля и методы. В данном случае методы и свойства могут быть доступны только наследникам класса Концепция инкапсуляции весьма поста: нужно просто думать о классе как о «черном ящике» с очень маленькой видимой областью. Видимая часть, которая называется интерфейсом класса позволяет остальным частям получать доступ к объектам данного класса и, таким образом, использовать их. Однако когда вы используете объекты, большая часть их кода от вас скрыта. Вы редко знаете, какие внутренние данные имеет объект, и обычно не имеете возможности прямого доступа к ним. Хороший стиль программирования требует, чтобы все поля класса относились к категории Private, а методы, как правило, имеют спецификатор Public Рассмотрим примеры…. Неделя информатики ВГПУ 2004 Технологии ООП В ООП имеется также понятие «позднее связывание» рассмотрим его более детально.. Обычно объекты наследуются сразу при компиляции, когда поиск метода производится компилятором, который заменяет вызов метода обращением к конкретной области памяти, по которому располагается процедура. Object Pascal предсатвляет другую возможность позднее связывание, в этом случае адрес методы определяется во время выполнения. В этом заключается основная идея полиморфизма вы пишете в исходном коде вызов метода, применяя его к какой либо переменной, но то, какой метод будет вызван на самом деле, зависит от типа объекта, на который ссылается эта переменная. Type TAnimal=class function voice:string;virtual; private kind:string; end; Tdos=class(TAnimal) public function voice:string;override; end; Неделя информатики ВГПУ 2004 Function TAnimal.voice:string; begin voice:=‘голос животного’; end; function TDog.voice:string; begin voice:=‘Голос собаки’; end. Технологии ООП Неделя информатики ВГПУ 2004 Технологии ООП Задачи для решения: 1 2 На экране создается некоторая первичная колония существ, располагающихся на поле клеточек (размер можно брать произвольно). Существа могут как размножаться, так и умирать, подчиняясь при этом двум законам: если вокруг пустой клетки есть ровно три особи (считая по горизонтали, вертикали и диагонали), то в этой клетке появляется новая особь. В противном случае она умирает: одни организм - этого недостаточно, а 4,5 и более создают перенаселение Запрограммировать три объекта, которые будут выполнять на игровом поле функции примитивных человечков. Два из которых будут стремиться найти друг-друга, но при этом избегать встречи с третьим. В случае если третий человечек «догонит» любого другого - тот останавливается. На игровом поле встречаются также различные препятствия, через которые ходить нельзя или ходить трудно. Такие, как камни, забор - через которые проходить нельзя и лужи, идя через которые человечек в два раза замедляет ход. Игровое поле - массив NxM Человек №1 - символ 1 Человек №2 - символ 2 Злой Человечек - символ @ Пустое поле - пробел Камень - символ * (звездочка) Забор - Символ ^ (возведение в степень) Лужа - Символ O Неделя информатики ВГПУ 2004 Технологии ООП