Файл: История Создания ООП.pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 31.03.2023

Просмотров: 104

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

6. Объектно-ориентированные языки

Инкапсуляция, наследование и полиморфизм — фундаментальные свойства, требуемые от языка, претендующего называться объектно-ориентированным. (Языки, не имеющие наследования и полиморфизма, но имеющие только классы, обычно называются основанными на классах.) Различные объектно-ориентированные языки используют совершенно разные подходы. Мы можем различать объектно-ориентированные языки, сравнивая механизм контроля типов, способность поддерживать различные программные модели и то, какие объектные модели они поддерживают. Языки объектного программирования принято делить на объектные, в которых существуют классы и объекты, и объектно-ориентированные, в которых программист может не только пользоваться предопределёнными классами, но и задавать собственные пользовательские классы (либо создавать объекты, устройство которых отличается от устройства прототипов — в языках прототипного программирования).

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

Объектно-ориентированное программирование в настоящее время является абсолютным лидером в области прикладного программирования (языки Java, C#, C++, JavaScript, ActionScript и др.). В то же время в области системного программирования до сих пор лидирует парадигма процедурного программирования, и основным языком программирования является язык C. Хотя при взаимодействии системного и прикладного уровней операционных систем заметное влияние стали оказывать языки объектно-ориентированного программирования. Например, мульти платформенным стандартом стала система Qt, написанная на языке C++.

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


Первым языком программирования, в котором были предложены принципы объектной ориентированности, была Симула. В момент своего появления (в 1967 году), этот язык программирования предложил поистине революционные идеи: объекты, классы, виртуальные методы и др., однако это всё не было воспринято современниками как нечто грандиозное. Тем не менее, большинство концепций были развиты Аланом Кэйем и Дэном Ингаллсом в языке Smalltalk. Именно он стал первым широко распространённым объектно-ориентированным языком программирования.

Различаются чистые и гибридные объектно-ориентированные языки. Чистые — это те, которые позволяют использовать только одну модель программирования — объектно-ориентированную. Вы можете объявлять классы и методы, но не можете завести глобальные переменные и обычные функции и процедуры старого типа.

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

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

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

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


7. Языки и программное окружение

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

Цель C++ - мощность и контроль за счет сложности. Целью Delphi является легкое, визуальное программирование (не отказываясь от мощности) и прочная связь с Windows. Цель Java - мобильность, даже за счет некоторого отказа от скорости, и распределённые приложения или исполняемое содержание WWW (хотя это, конечно, - не Microsoft-овский взгляд на Java!).

Можно определить, что успех этих трех языков зависит не от технических характеристик, которые я включил в эту статью. Финансовый статус Borland, операционная система управления Microsoft, популярность Sun в мире Internet, тот факт, что Java рассматривается как anti-Microsoft-овский язык, будущее броузеров Паутины и Win32 API, роль и признание модели ActiveX (из-за связанной с ней проблемой безопасности) и три уровня архитектуры Delphi - вот показатели, которые могли повлиять на ваш выбор сильнее, чем технические элементы. Например, такой хороший язык как Eiffel, у которого Object Pascal и Java взяли не только некоторое вдохновение, никогда не получит реальной доли рынка, хотя он был популярен во многих университетах земного шара.

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

8. Сферы применения ООП

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


Рассмотрим одно из применений ООП на примере тестового сайта. Сайт будет состоять из четырех основных файлов:
Имя файла Назначение

    • index.php Главная страница
    • bio.php Страница с описанием сайта
    • links.php Страница с ссылками
    • html.php Вспомогательный файл

В вспомогательном файле будут хранится все наши классы. В первую очередь определимся с тем, что страница у нас будет являться классом. Определим абстрактный класс HTML-страницы в файле html.php:

<?php

abstract class HTMLPage

{

protected $Title = "";

function __construct($Title)

{

$this->Title = "[Тестовый Сайт] " . $Title;

}

function BeginHTML()

{

echo <<<HTML

<html>

<head>

<title>{$this->Title}</title>

</head>

<body>

HTML;

}

function EndHTML()

{

echo <<<HTML

</body>

</html>

HTML;

}

function Logo()

{

echo "<h1>Тестовый Сайт</h2>";

}

function Menu()

{

echo <<<HTML

<table>

<tr>

<td><a href='index.php'>Главная страница</a></td>

<td><a href='bio.php'>Биография</a></td>

<td><a href='links.php'>Ссылки</a></td>

</tr>

</table>

HTML;

}

abstract function MainText();

function Write()

{

$this->BeginHTML();

$this->Logo();

$this->Menu();

$this->MainText();

$this->Menu();

$this->EndHTML();

}

}

?>

Рассмотрим для чего нужен каждый из методов:

function __construct($Title) — Создание и инициализация объекта (в нашем случае установка название страницы).

function BeginHTML() — Вывод заголовок html-файла.

function EndHTML() — Вывод окончания html-файла.

function Logo() — Вывод логотипа сайта.

function Menu() — Вывод главного меню сайта.

abstract function MainText() — Вывод основного содержания веб-страницы.

function Write() — Вывод веб-страницы, использую методы для вывода отдельных элементов веб-страницы.

Часть методов служит для вывода отдельных элементов страницы, таких, как меню, логотип и так далее. В методе Write все эти функции вызываются для того, чтобы вывести всю страницу целиком. Особое внимание следует уделить абстрактному методу MainText. Этот метод называется абстрактным поскольку он не реализован в этом классе, а только объявлен. Этот метод будет переопределен и реализован в дочерних классах. Так на странице ссылок в этом методе будут выводиться ссылки, а на странице биографии - текст биографии Васи Пупкина. Сам класс объявлен также абстрактным, соответственно, будет невозможно создать экземпляры такого класса.

В классе объявлена переменная $Title с областью видимости protected, то есть доступ к ней может получить либо сам класс, либо его наследники. Теперь осталось создать остальные три файла.


<?php

include_once("html.php");

class IndexPage extends HTMLPage

{

function MainText()

{

echo "<p>Добро пожаловать на Тестовый Сайт";

}

}

$Page = new IndexPage("Главная страница");

$Page->Write();

?>

В данном случае просто создается новый класс IndexPage, производный от класса HTMLPage и переопределяется метод MainText для вывода основного содержания страницы.

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

Заключение

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

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

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

Полиморфизм – многие объекты могут иметь одноименные методы, которые могут выполнять разные действия для разных объектов.

Типизация имеет очень большое значение как в языке Java (сильная типизация), так и в C++, (типизация также является сильной, но существуют правила неявного преобразования типов, определяемых пользователем). В отличие от С++, в Java присутствует непосредственная языковая поддержка принципов параллелизма и сохраняемости.

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