Редактирование: Языки программирования, 04 лекция (от 14 сентября)

Материал из eSyr's wiki.

Перейти к: навигация, поиск

Внимание: Вы не представились системе. Ваш IP-адрес будет записан в историю изменений этой страницы.

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

Текущая версия Ваш текст
Строка 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]]. В С строка&nbsp;&mdash; последовательность байтов, заканчиваемая нулём (ASCIIZ-строка), в Pascal&nbsp;&mdash; строки со счётчиком длины. И для узнавания длины строки в С нужно делать операцию расчёта длины, в Pascal это данные&nbsp;&mdash; 0<sup>й</sup> байт. То есть, то, что в Pascal является данными, в С является операцией.
+
-
 
+
-
В Pascal шиковали, давая имя нулевому байту строки
+
-
 
+
-
'''(Pascal)'''
+
-
var S: string absolute len:byte;
+
-
 
+
-
 
+
-
'''Объект'''
+
-
* состояние&nbsp;&mdash; моделируется членами класса
+
-
* поведение&nbsp;&mdash; моделируется сообщениями и их посылкой
+
-
 
+
-
В [[С++]] возникают getters/setters, что проявляет дуализм. В [[С#]], [[Delphi]] имеется механизм get/set для полей класса, называемых '''property''' (свойство).
+
-
 
+
-
'''(C#)'''
+
-
class C
+
-
{
+
-
public T X
+
-
{
+
-
get() { ... }
+
-
set() { ... }
+
-
}
+
-
}
+
-
 
+
-
Пользователю удобно рассматривать это как состояние, реализовано же это как операция.
+
-
 
+
-
Тип данных характеризуется множеством значений&nbsp;&mdash; представление начала 60<sup>х</sup> годов. Современная точка зрения: тип данных&nbsp;&mdash; множество значений (состояние) и множество операций (поведение). Например, стек характеризуют именно операции push и pop, а не тип элементов стека.
+
-
 
+
-
'''Абстрактный тип данных'''&nbsp;&mdash; множество операций, без состояния.
+
-
 
+
-
Поэтому и рекомендуется не делать поля публичными, так как это позволяет менять реализацию без смены интерфейса.
+
-
 
+
-
===Основные характеристики данных===
+
-
 
+
-
# Имя (но бывают и безымянные объекты)
+
-
# Значение
+
-
# Область видимости
+
-
# Время жизни
+
-
 
+
-
'''Область видимости (действия)''' начинается от языковой конструкции, где вводится объект данных. С каждым объектом связываются тип, область действия, время жизни.
+
-
 
+
-
Виды объектов
+
-
* статические&nbsp;&mdash; существуют всё время работы программы
+
-
* квазистатические&nbsp;&mdash; существуют только во время работы некоторой синтаксически выделенной конструкции (блока)
+
-
* динамические&nbsp;&mdash; существуют до тех пор, пока нужны: до сборки мусора, удаления
+
-
* хранимые (persistent)
+
-
 
+
-
В C# есть класс Image, у него есть метод LoadFromFile, который загружает графический файл. И закрывается этот файл тогда, когда исчезает объект Image. Соответственно, его нельзя открыть повторно&nbsp;&mdash; недостаток C#. // примечание: смешиваете в одну кучу язык сишарп и библиотеку framework
+
-
 
+
-
В [[Языки программирования, 05 лекция (от 19 сентября)|следующий раз]] будет адская семантика.
+
-
 
+
-
{{Языки Программирования}}
+
-
{{Lection-stub}}
+

Пожалуйста, обратите внимание, что все ваши добавления могут быть отредактированы или удалены другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. eSyr's_wiki:Авторское право).
НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

Личные инструменты
Разделы