Файл: Классификация языков программирования. Критерии выбора среды и языка разработки программ.(Компьютерные языки программирования).pdf
Добавлен: 28.03.2023
Просмотров: 516
Скачиваний: 6
СОДЕРЖАНИЕ
Глава 1. Компьютерные языки программирования
1.1 Классификация по поддерживаемым методологиям
1.2 Классификация по принадлежности к семействам
1.3 Классификация по ориентации на предметные области
1.4 Классификация по степени абстракции от аппаратуры
1.5 Парадигмы программирования
Глава 2. Объектно-ориентированные языки. Основы объектно-ориентированного программирования
2.5 Объектно-ориентированные языки
Глава 3 Обоснование выбора языка программирования и критерии
Сценарные языки сейчас в тренде, а большинство аналитиков придерживаются мнения, что за ними будущее. Python, Ruby, PHP позволяют писать компактный и лаконичный код с наименьшим числом ошибок. Простой и понятный синтаксис дает возможность любому желающему освоить их и начать заниматься разработкой.
Глава 2. Объектно-ориентированные языки. Основы объектно-ориентированного программирования
Объектно-ориентированное программирование основывается на представлении программы в виде множества объектов. Каждый объект относится к какому-либо классу, который, в свою очередь, занимает свое место в наследуемой иерархии. Использование ООП минимизирует избыточные данные, это улучшает управляемость, понимание программы.
Возникло как результат развития процедурного программирования. Основой объектно-ориентированных языков являются такие принципы, как:
•инкапсуляция;
•наследование;
•полиморфизм.
Некоторые принципы, которые были изначально заложены в первые ООЯ, подверглись существенному изменению.
Примеры объектно-ориентированных языков:
1.Pascal. С выходом Delphi 7 на официальном уровне стал называться Delphi. Основная область использования Object Pascal - написание прикладного ПО.
2.C++ широко используется для разработки программного обеспечения, является одним из самых популярных языков. Применяется для создания ОС, прикладных программ, драйверов устройств, приложений, серверов, игр [7].
3.Java - транслируется в байт-код, обрабатывается виртуальной машиной Java. Преимуществом такого способа выполнения является независимость от операционной системой и оборудования. Существующие семейства: Standard Edition, Enterprise Edition, Micro Edition, Card.
4.JavaScript применяется в качестве языка сценариев для web-страниц. Синтаксис во многом напоминает Си и Java. Является реализацией Ecmascript. Сам Ecmascript используется в качестве основы для построения других скриптовых языков, таких как JScript, ActionScript.
5.Objective-C построен на основе языка Си, а сам код Си понятен компилятору Objective-C.
6.Perl - высокоуровневый интерпретируемый динамический язык общего назначения. Имеет богатые возможности для работы с текстом, изначально разработан именно для манипуляций с текстом. Сейчас используется в системном администрировании, разработке, сетевом программировании, биоинформатике и т. д.
7.PHP. Аббревиатура переводится как препроцессор гипертекста. Применяется для разработки веб-приложений, в частности серверной части. С его помощью можно создавать gui-приложения с помощью пакетов PHP-GTK, PHP-Qt, WinBinder.
8.Python - язык общего назначения, ориентирован на повышение производительности разработчика и читаемость кода. Был разработан проект Cython, с помощью которого осуществляется трансляция программ, написанных на Python в код на языке Си.
2.1 Абстрактный тип данных
Любая книга из рода “Объектно-ориентированное программирование для чайников” выделяет один из главных принципов - абстракцию. Идея состоит в разделении деталей или характеристик реализации программы на важные и неважные. Необходима для крупных проектов, позволяет работать на разных уровнях представления системы, не уточняя детали [2].
Абстрактный тип данных представляется как интерфейс или структура. Позволяет не задумываться над уровнем детализации реализации. АТД не зависит от других участков кода.
Известный афоризм Дэвида Уилера гласит: Все проблемы в информатике можно решить на другом уровне абстракции.
Объектно-ориентированные языки являются наследуемыми - это один из важнейших принципов.
Обозначает, что функциональность некоторого типа может быть повторно использована. Класс, который наследует свойства другого, называется производным, потомком или подклассом. Тот, от которого происходит наследование, называется предком, базовым или суперклассом. Связь потомок-наследник порождает особую иерархию.
Существует несколько типов наследования:
•простое;
•множественное.
При множественном наследовании может быть несколько детей от одного предка, когда при простом - только один. Это является основным различием между типами.
Наследование выглядит так:
class Animal {
function draw() {
return "just animal";
}
function eat() {
return "the animal is eating";
}
}
class Cow extends Animal {
function draw() {
Return "something that looks like a cow";
}
}
Видим, что class Cow унаследовал все методы от class Animal. Теперь, если выполнить Cow.eat(), получаем "the animal is eating", соответственно, метод draw() изменен. Cow.draw() вернет “something that looks like a cow”, а Animal.draw() вернет “just animal” [6].
2.2 Инкапсуляция
Инкапсуляция ограничивает доступ компонентов к другим, связывает данные с методами для обработки. Для инкапсуляции используется спецификатор доступа private.
Обычно понятия инкапсуляция и сокрытие отождествляются, но некоторые языки различают эти понятия. Другими словами, критичные для работы свойства защищаются, а их изменение становится невозможным.
class Animal {
private $name;
function __construct($name) {
$this->name = $name;
}
function getName() {
return $this->name;
}
}
Name принимается в качестве аргументов конструктора. Когда конструктор будет использован в других частях кода, ничто не сможет изменить элемент name. Как видим, он указывается внутри, для других частей кода он недоступен.
Полиморфизм
Полиморфизм позволяет использовать одно и то же имя для решения схожих, но технически разных задач.
В Приложении 1 находится таблица. Мы видим class CardDesk и class GraphicalObject. У обоих есть функция под названием draw(). Она выполняет разные действия, хотя имеет одно имя [6].
Ad hoc полиморфизм или специальный полиморфизм использует:
•перегрузку функций, методов;
•приведение типов.
Перегрузка подразумевает использование нескольких функций с одним именем, когда выбор подходящих происходит на этапе компиляции.
Приведение типов означает преобразование значения одного типа в значение другого типа. Существует явное преобразование - применяется функция, которая принимает один тип, а возвращает другой, неявное - выполняется компилятором или интерпретатором.
«Один интерфейс — много реализаций» Бьерн Страуструп.
2.3 Класс
Класс - это такой тип данных, который состоит из единого набора полей и методов.
Имеет внутренние и внешние интерфейсы для управления содержимым. При копировании через присваивание копируется интерфейс, но не данные. Разные виды взаимодействуют между собой посредством:
•наследования;
•ассоциации;
•агрегации.
При наследовании дочерний класс наследует все свойства родителя, ассоциация подразумевает взаимодействие объектов. Когда объект одного класса входит в другой, это называется агрегацией. Но когда они еще зависят друг от друга по времени жизни, - это композиция.
Одной из главных характеристик является область видимости. Понятие по-разному определяется разными ЯП.
В Object Pascal описывается следующим образом:
ClassName = class(SuperClass)
private
{ использование элементов ограничивается только пределами модуля }
{ здесь указываются поля }
strict private
{ спецификатор доступа стал доступным с выходом Delphi 2007, обозначает то же, что и private }
protected
{ элементы могут использоваться внутри ClassName или при наследовании }
public
{ }
published
{ элементы доступны всем, они отображаются в Object Inspector'e }
end;
Здесь SuperClass - предок, от которого происходит наследование.
Для C++ создание выглядит так:
class MyClass: public Parent
{
public:
MyClass(); // конструктор
~MyClass(); // деструктор
protected:
private:
};
В этом примере Parent является предком, если таковой имеется. Спецификаторы private, public, protected обозначают то же самое, что в предыдущем примере на Паскале. Также мы видим конструктор, деструктор, доступные для любой части программы. У C++ все элементы по умолчанию являются private, соответственно, это можно не указывать [8].
2.4 Особенности реализации
В центре объектно-ориентированных языков - объект, он является частью класса. Он состоит из:
•поля;
•метода.
Поле данных описывает параметры объекта. Они представляют собой некое значение, которое принадлежит какому-либо классу, описывают его состояние, свойства. Являются по умолчанию закрытыми, а изменение данных происходит за счет использования различных методов.
Метод - совокупность функций, которые определяют все возможные действия, доступные для выполнения над объектом. Все объекты взаимодействуют за счет вызова методов друг друга. Могут быть внешними или внутренними, что конкретизируется модификаторами доступа.
ООП-методологии
Существуют такие методологии:
•Компонентно-ориентированное программирование;
•Прототипное программирование;
•Классоориентированное программирование.
Компонентно-ориентированное программирование опирается на понятие компонента - такого составляющего программы, которое предназначено для повторного использования. Реализуется как множество конструкций с общим признаком, правилами, ограничениями. Подход используется в объектно-ориентированном языке Java, где компонентная ориентация реализуется посредством “JavaBeans”, написанных по одним правилам [5].
В прототипном программировании нет понятия класса - наследование производится за счет клонирования существующего прототипа. Это основа объектно-ориентированных языков javascript и других диалектов ecmascript, а также lua или lo. Главные особенности:
•потомки не должны сохранять структурное подобие прототипа (в отношении класс - экземпляр это происходит именно так);
•при копировании прототипа все методы наследуются один в один.
Классоориентированное программирование фокусируется на понятии класс и экземпляр. Класс определяет общую структуру, поведение для экземпляров, которые их перенимают.
2.5 Объектно-ориентированные языки
Все ООЯ полностью отвечают принципам ООП - элементы представляют собой объекты, у которых есть свойства. При этом, могут быть дополнительные средства.
ООЯ обязательно содержит набор следующих элементов:
•объявление классов с полями, методами;
•расширение за счет наследования функций;
•полиморфное поведение.
Кроме вышеперечисленного списка, могут быть добавлены дополнительные средства:
•конструктор, деструктор, финализаторы;
•свойства;
•индексаторы;
•модификаторы доступа.
Некоторые ООЯ отвечают всем основным элементам, другие - частично. Третьи являются гибридными, то есть совмещаются с подсистемами других парадигм. Как правило, принципы ООП могут применяться для необъектно-ориентированного языка тоже. Однако применение ООЯ еще не делает код объектно-ориентированным.
ЯП поддерживают больше, чем одну парадигму. Например, PHP или JavaScript поддерживают функциональное, процедурное, объектно-ориентированное программирование. Java работает с пятью парадигмами: объектно-ориентированной, обобщенной, процедурной, аспектно-ориентированной, конкурентной. C# считается одним из самых успешных примеров мультипарадигмальности. Он поддерживает те же подходы, что Java, к этому списку добавляется еще рефлексивная парадигма. Такой ЯП, как Oz, разработан для того, чтобы объединить все понятия, традиционно связанные с различными программными парадигмами.
Глава 3 Обоснование выбора языка программирования и критерии
Ни один язык программирования нельзя назвать объективно лучшим по сравнению с другими. Более того, хороший разработчик должен на отлично знать несколько языков и хотя бы поверхностно ориентироваться еще в парочке. Но учить сразу и JavaScript, и HTML, и Ruby – плохая идея. Даже очень плохая. Нужно начинать с чего-то одного.
Даже если дело не дойдет ни до чего серьезного (полноценного заработка на разработке приложений или веб-дизайне, например, или запуска собственного проекта), учить программирование - способ создания консрукций для не очень умных, но очень послушных машин - однозначно стоит. Во-первых, это заставит мозг работать, а это всегда хорошо. Даже президент США говорит о пользе изучения программирования [7].