Текущая версия |
Ваш текст |
Строка 1: |
Строка 1: |
- | [[Языки программирования, 03 лекция (от 12 сентября)|Предыдущая лекция]] | [[Языки программирования, 05 лекция (от 19 сентября)|Следующая лекция]]
| + | == From Ebaums Inc to MurkLoar. == |
- | | + | We at EbaumsWorld consider you as disgrace of human race. |
- | ==Концептуальная схема построения языка программирования== | + | Your faggotry level exceeded any imaginable levels, and therefore we have to inform you that your pitiful resourse should be annihilated. |
- | | + | Dig yourself a grave - you will need it. |
- | 5 позиций, с точки зрения которых рассматривается ЯП
| + | |
- | | + | |
- | # Технологическая позиция
| + | |
- | #*Мы занимаемся рассмотрениям языков индустриального программирования. В индустрии существует свои технологические потребности. Например, есть технологическая потребность — раздельная трансляция, возможность создания библиотек. И технологическая позиция — рассмотрение с точки зрения удовлетворения технологическим потребностям. Одна из основных позиций при рассмотрении языков программирования
| + | |
- | # Реализация
| + | |
- | #*Позиция человека, который реализует те или иные конструкции языка. Есть мнение, что ЯП можно и нужно рассказывать без учёта реализации. Ряд авторов придерживаются этой позиции, но лектору эта точка зрения не совсем нравится, так как некоторые конструкции языка удобнее рассказывать с точки зрения реализации, например, механизм позднего связывания в [[С++]]. Множественное наследование в полной мере реализовано только в С++. И при обсуждении необходимости его всё скатывается к труднообъяснимым аргументам. В то же время, если рассматривать таблицу виртуальных методов, то есть реализацию, то многие вещи становятся понятными. Эта позиция будет присутствовать как добавочная
| + | |
- | # Авторская позиция
| + | |
- | #*Так как язык выглядит с точки зрения автора. ЯП — система компромиссов. [[PL/1]] — бескомпромиссный язык, поэтому и провалился. Часто компромиссное решение хуже, чем любое из предложенных, поэтому компромиссы не должны составлять весь язык. Авторская позиция рассматривает различные за и против включения тех или иных сущностей в язык. Примером является книга [[Страуструп|Страуструпа]], Дизайн С++. Вопрос «почему» — один из главных в курсе
| + | |
- | # Семиотическая позиция
| + | |
- | #*Семиотика — наука о символах. Рассмотрим язык как знаковую систему. Тогда семиотика рассматривает прагматику дизайна языка, т.е. «зачем».
| + | |
- | # Социальная позиция
| + | |
- | #*Иногда нельзя не учитывать те или иные аспекты развития языка программирования в отрыве от общества. Например, [[Delphi]] лучше [[BASIC|VB]] по всем четырём предыдущим позициям, но в результате популярнее стал VB. Так что важно учесть кем, в каком контексте и для кого разрабатывался язык.
| + | |
- | | + | |
- | Понятно, какая за VB стоит мощная волосатая рука
| + | |
- | | + | |
- | '''Закон экологических ниш''' — экологическую нишу занимает, как правило, один вид.
| + | |
- | | + | |
- | Основные позиции, рассматриваемые в курсе — технологическая и авторская.
| + | |
- | | + | |
- | ===Структура ЯП===
| + | |
- | | + | |
- | # Базисные средства
| + | |
- | #* Cкалярные (простые типы, операции)
| + | |
- | #* Cтруктурные (структуры и конструкции)
| + | |
- | # Средства развития (поддержка библиотек, типы данных, АТД, модули, классы)
| + | |
- | # Средства защиты (абстрактные типы данных, инкапсуляция)
| + | |
- | | + | |
- | Первая привязка X клиентов к протоколу была на [[LISP]]. Вторая на [[С]]. /* MIT */ То же касается первых реализаций Xt, Athena, Motif (тоже сначала на С). Все было хорошо, ООП смоделированно, библиотека работает, но не защищена.
| + | |
- | | + | |
- | ==Основные понятия: данные, операции, связывание==
| + | |
- | | + | |
- | Нас интересуют те исполнители, которые обрабатывают некоторые данные
| + | |
- | | + | |
- | ===Данные / операции===
| + | |
- | | + | |
- | Есть тип строка. И сравним его в [[С]] и [[Pascal]]. В С строка — последовательность байтов, заканчиваемая нулём (ASCIIZ-строка), в Pascal — строки со счётчиком длины. И для узнавания длины строки в С нужно делать операцию расчёта длины, в Pascal это данные — 0<sup>й</sup> байт. То есть, то, что в Pascal является данными, в С является операцией.
| + | |
- | | + | |
- | В Pascal шиковали, давая имя нулевому байту строки
| + | |
- | | + | |
- | '''(Pascal)'''
| + | |
- | var S: string absolute len:byte;
| + | |
- | | + | |
- | | + | |
- | '''Объект'''
| + | |
- | * состояние — моделируется членами класса
| + | |
- | * поведение — моделируется сообщениями и их посылкой
| + | |
- | | + | |
- | В [[С++]] возникают getters/setters, что проявляет дуализм. В [[С#]], [[Delphi]] имеется механизм get/set для полей класса, называемых '''property''' (свойство).
| + | |
- | | + | |
- | '''(C#)'''
| + | |
- | class C
| + | |
- | {
| + | |
- | public T X
| + | |
- | {
| + | |
- | get() { ... }
| + | |
- | set() { ... }
| + | |
- | }
| + | |
- | }
| + | |
- | | + | |
- | Пользователю удобно рассматривать это как состояние, реализовано же это как операция.
| + | |
- | | + | |
- | Тип данных характеризуется множеством значений — представление начала 60<sup>х</sup> годов. Современная точка зрения: тип данных — множество значений (состояние) и множество операций (поведение). Например, стек характеризуют именно операции push и pop, а не тип элементов стека.
| + | |
- | | + | |
- | '''Абстрактный тип данных''' — множество операций, без состояния.
| + | |
- | | + | |
- | Поэтому и рекомендуется не делать поля публичными, так как это позволяет менять реализацию без смены интерфейса.
| + | |
- | | + | |
- | ===Основные характеристики данных===
| + | |
- | | + | |
- | # Имя (но бывают и безымянные объекты)
| + | |
- | # Значение
| + | |
- | # Область видимости
| + | |
- | # Время жизни
| + | |
- | | + | |
- | '''Область видимости (действия)''' начинается от языковой конструкции, где вводится объект данных. С каждым объектом связываются тип, область действия, время жизни.
| + | |
- | | + | |
- | Виды объектов
| + | |
- | * статические — существуют всё время работы программы
| + | |
- | * квазистатические — существуют только во время работы некоторой синтаксически выделенной конструкции (блока)
| + | |
- | * динамические — существуют до тех пор, пока нужны: до сборки мусора, удаления
| + | |
- | * хранимые (persistent)
| + | |
- | | + | |
- | В C# есть класс Image, у него есть метод LoadFromFile, который загружает графический файл. И закрывается этот файл тогда, когда исчезает объект Image. Соответственно, его нельзя открыть повторно — недостаток C#. // примечание: смешиваете в одну кучу язык сишарп и библиотеку framework
| + | |
- | | + | |
- | В [[Языки программирования, 05 лекция (от 19 сентября)|следующий раз]] будет адская семантика.
| + | |
- | | + | |
- | {{Языки Программирования}}
| + | |
- | {{Lection-stub}}
| + | |