Парадигмы программирования, 11 лекция (от 03 декабря)

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

(Различия между версиями)
Перейти к: навигация, поиск
(Новая: Через неделю будет экзамен. Список экз. билетов выложен по адресу: http://www.stolyarov.info/pvt/par_exam (возможно, деф...)
(mailto -> history)
 
(4 промежуточные версии не показаны)
Строка 1: Строка 1:
-
Через неделю будет экзамен. Список экз. билетов выложен по адресу: http://www.stolyarov.info/pvt/par_exam (возможно, дефис вместо подчёркивания). На всякий случай: лектора можно добыть по адресу avst@cs.msu.ru. Адрес не для публикации, использовать, если что-то необх. сообщить отн. списка вопросов. Возм., последние два вопроса, если сегодня не успеет их лектор, будут выкинуты.
+
* '''Аудиозапись:''' http://esyr.org/lections/audio/paradigms_2009_winter/paradigms_09_12_03.ogg
-
Технология проведения экзамена. Техн. обусловлена тем, что дост. много людей хотят получить за посещение. На экз. будут принесены ксерокопии, сrhtgktyyst cntgkthjv? gjckt xtuj ;tkf.obv ghtlk/ yfqnb ct,z d rjhbljht d ,evf;rf[ b dsgbcfnm номера в этих списках. В это время в аудитории будут выдаваться билети и юди будут готовиться сдавать экзамен. После выдачи билетов можно подходить и получать экзамен. Ещё один момент: запасайтесь ведомостью заранее. В ведомость можно запис. студентов одной группы.
+
Через неделю будет экзамен. Список экз. билетов выложен по адресу: http://www.stolyarov.info/pvt/par_exam (возможно, дефис вместо подчёркивания). На всякий случай: лектора можно добыть по электронной почте (адрес уехал в history). Адрес не для публикации, использовать, если что-то необх. сообщить отн. списка вопросов. Возможно, последние два вопроса, если сегодня не успеет их лектор, будут выкинуты.
 +
 
 +
Технология проведения экзамена. Техн. обусловлена тем, что дост. много людей хотят получить за посещение. На экз. будут принесены ксерокопии, скрепленные степлером, после чего желающим предложат найти себя в коридоре в бумажках и выписать номера в этих списках. В это время в аудитории будут выдаваться билети и юди будут готовиться сдавать экзамен. После выдачи билетов можно подходить и получать экзамен. Ещё один момент: запасайтесь ведомостью заранее. В ведомость можно записывать студентов одной группы.
На 4 балла — все лекции кроме двух, на 3 — 2/3 с округлением вниз. (7 из 11)
На 4 балла — все лекции кроме двух, на 3 — 2/3 с округлением вниз. (7 из 11)
Строка 9: Строка 11:
----
----
-
Традицуионные парадигмы прогр.: императивные и всё, что с ними связано (ООП, ...)
+
Традиционные парадигмы программирования: императивные и всё, что с ними связано (ООП, ...)
-
Импер., или фон-неймановская парадигма. Какое самое главное слово в импер. прогр.: присваивание. Прогр. имеет сост., и она сост. из его изменения. Переменная, как обл. памяти и присв.
+
Императивная, или фон-неймановская парадигма. Какое самое главное слово в императивном программировании: присваивание. Программа имеет состояние, и она состоит из его изменения. Переменная, как область памяти и присваивание.
-
В импер. прогр. есть неявная сост. состояния. Мы из теор. автоматов знаем, что такое сост. Есть неявная сост. состояния: как минимум, значение IP. Эта неявная сост. явл. в мышл. некоторых настолько важной, что они не могут написать событийную модель без исп. тредов. К сожалению, лектор не смогу убедить в необх. расск. про сис. вызов select, позв. ожидать одно из множ. событий.
+
В императивном программировании есть неявная составляющая состояния. Мы из теории автоматов знаем, что такое состояние. Есть неявная составляющая состояния: как минимум, значение IP. Эта неявная составляющая является в мышлении некоторых настолько важной, что они не могут написать событийную модель без использования тредов. К сожалению, лектор не смогу убедить в необходимости рассказывать про системный вызов select, позволяющий ожидать одно из множества событий.
....
....
-
Вроде бы это разновидность импер. программирования, но образ мышления тут совсем другой.
+
Вроде бы это разновидность императивного программирования, но образ мышления тут совсем другой.
-
Опредедление автоматного программирования: фрагмент кода может быть оформлен в виде чего-то, напоминающего конечный автомат. Принципиально что: шаги автомата не перекрываются по времени. Между шагами автомата инф. может передаваться только через явно очерченный круг переменных.
+
Определение автоматного программирования: фрагмент кода может быть оформлен в виде чего-то, напоминающего конечный автомат. Принципиально что: шаги автомата не перекрываются по времени. Между шагами автомата информация может передаваться только через явно очерченный круг переменных.
Есть такой человек, Алан Кокс, одно время был senior architect ядра Линукс. Он в своё время сказал такую вещь: компьютер это конечный автомат, и те, кто плодят треды, не знают, как пользоваться компьютером. Альтернатива — только треды. Для тех, кто не может распознать сост. состояния и использовать её.
Есть такой человек, Алан Кокс, одно время был senior architect ядра Линукс. Он в своё время сказал такую вещь: компьютер это конечный автомат, и те, кто плодят треды, не знают, как пользоваться компьютером. Альтернатива — только треды. Для тех, кто не может распознать сост. состояния и использовать её.
-
Теперь мы заговорили на событийно-ориент. прогр. Известно, что событийно-ориент. программы приятне всего писать на ОО-языке. Ещё со времён смоллтока. Тогда же появилась Симула, которая предн. для имитац. меоделир. и хорошо для него подхзодит. Неоднократно лектору приходилось встр. с таким утверждением: ООП не более чем разновидность импер. программирования. Утв. неверное категорически. Откуда оно берётся? Скорее всего из того, что ОО-языки в больш. свойм императиные. С другой стороны, clisp object system, но никто же не утверждается, что ОО это слегка изм. функц. прогр. Поэтому ОО не функц. и не импер. прогр. Как доказатьь это: для ОО-программирования присваивание явл. возм. посторонней. В чистом ОО присв. быть не может. Что такое присв? Это полная замена сост. переменной. Теперь вспоминаем, что такое ООП? В ООП среда вып. прогр. предст. как набор чорных ящиков, наз. объектами., т. е. системами, с внутр. которых нельзя озн., только внеш. проявл. Известно, что объект может принимать сообщ. и отвечать на них. При этом он можнет изм. собст. сост. и обм. с другими объектами сообщениями. При этом мы не знаем, сменил ли объект сост. полностью или нет. Тому що это нарушает принцип инкапсуляции. Поэтому присв. в чистом ОО быть не может. Если же допускается, то это озн., что ЯП поддерж. не только ООП.
+
Теперь мы заговорили на событийно-ориентированное программирование. Известно, что событийно-ориентированные программы приятне всего писать на ОО-языке. Ещё со времён smalltalk'а. Тогда же появилась Симула, которая предназначалась для имитационного меоделирования и хорошо для него подходит. Неоднократно лектору приходилось встречаться с таким утверждением: ООП не более чем разновидность императивного программирования. Утверждение неверное категорически. Откуда оно берётся? Скорее всего из того, что ОО-языки в большинстве своём императиные. С другой стороны, есть Common Lisp Object System [http://en.wikipedia.org/wiki/Common_Lisp_Object_System], но никто же не утверждается, что ООП — это слегка измененное функциональное программирование. Поэтому ОО не является ни функциональным, ни императивным программированием. Как доказать это: для ОО-программирования присваивание является возможностью посторонней. В чистом ОО присваивание быть не может. Что такое присваивание? Это полная замена состояния переменной. Теперь вспоминаем, что такое ООП? В ООП среда выполнения программы представляет как набор чёрных ящиков, называемых объектами, т. е. системами, с внутренностями которых нельзя ознакомиться, только со внешними проявлениями. Известно, что объект может принимать сообщения и отвечать на них. При этом он можнет изменять собственное состояние и обмениваться с другими объектами сообщениями. При этом мы не знаем, сменил ли объект состояние полностью или нет. Потому что это нарушает принцип инкапсуляции. Поэтому присваивание в чистом ОО быть не может. Если же допускается, то это означает, что ЯП поддерживает не только ООП.
-
С ОО, поговорим о нём ещё. Более практическая терминология заменяет понятие отправки сообщ. на понятие "вызов метода". Ответ на сообщ. --- рез-т вызова метода. Теперь чуть дальше. В ОО есть классы. Это нечто, фабрика объектов, экземпляров класса. То есть классы это что-то, позв. созд. объекты, один. по внутр. устройству. Отсюда класс есть множество объектов. Конечно, не любое множ. объектов явл. классом. В таких терминах можно опр. понятие насл. Когда мы насл., то мы добавляем свойства. Это озн., что мы множество сузили. КОгда мы сужаем множ., то мы можем сказать что-то дополн. о них. При этом A ⊃ B.
+
С ОО, поговорим о нём ещё. Более практическая терминология заменяет понятие отправки сообщений на понятие "вызов метода". Ответ на сообщение — результат вызова метода. Теперь чуть дальше. В ОО есть классы. Это нечто, фабрика объектов, экземпляров класса. То есть классы это что-то, позволяющее создавать объекты, одинаковые по внутреннему устройству. Отсюда класс есть множество объектов. Конечно, не любое множество объектов является классом. В таких терминах можно определить понятие наследования. Когда мы наследуем, то мы добавляем свойства. Это означает, что мы множество сузили. Когда мы сужаем множество, то мы можем сказать что-то дополнительное о них. При этом A ⊃ B.
-
Ntgthm ktrnjh cj,cndtyyj [jntk crfpfnm ghj to` jlye byn/ ghfflbuve? njxytt? rkfcc zpsrjd/ Есть класс языков, по крайней мере, больш. из них явл. импер., языки эти наз. командно-скриптовыми. С т. з. лектора, к-с языки опр. тремя моментами:
+
Теперь лектор собственно хотел сказать про ещё одну интересную парадигму, точнее, класс языков. Есть класс языков, по крайней мере, большинство из них является императивными, языки эти называются командно-скриптовыми. С точки зрения лектора, класс языки определяется тремя моментами:
-
* Строка — наше всё. Строка текста как универс. предст. для любых типов данных, а также самой программы.
+
* Строка — наше всё. Строка текста как универсальный представления для любых типов данных, а также самой программы.
-
* Развитые и легко применимые средства запуска внеш. программ и упр. ими.
+
* Развитые и легко применимые средства запуска внешних программ и управления ими.
-
* (в принципе, явл, соедствием первого) Функция eval.
+
* (в принципе, являющеяся, следствием первого) Функция eval.
-
Почему eval возник здесь? Потому что для кода и для данных одно предст., и м может во время предст. слепить кусок кода и подать его на вход интерпретатору. Где такое ещё есть: в lisp.
+
Почему eval возник здесь? Потому что для кода и для данных одно представление, и программа может во время работы слепить кусок кода и подать его на вход интерпретатору. Где такое ещё есть: в lisp.
-
Кто-то может сказать, что стр. не явл. общим предст.. Есть такой язык tcl, раньше это было так, сейчас не совсем, но есть полная иллюзия того, что работа всё равно со строками. Когда это становится видно: когда его встраиваем или расширяем. Тогда мы видим, что там возн. полиморфные объекты, но внутри это не видно.
+
Кто-то может сказать, что строка не является общим представлением. Есть такой язык tcl, раньше это было так, сейчас не совсем, но есть полная иллюзия того, что работа всё равно со строками. Когда это становится видно: когда его встраиваем или расширяем. Тогда мы видим, что там возникают полиморфные объекты, но внутри это не видно.
-
Что здесь интересно: в КС языках очень интересна скорость разработки. Благодаря тому, что есть простое ср. упр. внешними программами, то можно их очень быстро слепить. Более того, если мы возьмём КС-язык, который из. был придуман как язык упр. заданиями, тот же самый bourne shell, то там мы можем обнаружить такую вещь, как алгебру программ. Так вот, если рассм. как некий обхект со стандартным вводом, выводом и командной строкой, то можно заметить два способа суперпозиции: конвейер и обр. апострофы.
+
Что здесь интересно: в КС языках очень интересна скорость разработки. Благодаря тому, что есть простое средство управления внешними программами, то можно их очень быстро слепить. Более того, если мы возьмём КС-язык, который изначально был придуман как язык управления заданиями, тот же самый bourne shell, то там мы можем обнаружить такую вещь, как алгебру программ. Так вот, если рассмотривать это как некий объект со стандартным вводом, выводом и командной строкой, то можно заметить два способа суперпозиции: конвейер и обратные апострофы.
-
Кроме того, это позв. связывать программы, в том числе, написанные с исп. разных парадигм.
+
Кроме того, это позволяет связывать программы, в том числе, написанные с использованием разных парадигм.
-
Последнее, что лектор хочет сказать: а давайте посм. внимательно на понятие ascii-текст. Вообще, это понятие может использ. для хроанения чего угодно, это своевременно обнаружили, и в результате большинство протоколов текстовые, конфигурационные файлы текстовые. Что это позв? Встраиваться программисту в цепочку работы программ, например, в целях отладки. Кроме того, ascii есть везде, а с юникодом и кодировки есть варианты. Если же это ascii, то мы это всегда увидим. Кроме того, можно взять бинарный файл и вычленить из него строки. Для этого есть, например, команда strings.
+
Последнее, что лектор хочет сказать: а давайте посмотрим внимательно на понятие ascii-текст. Вообще, это понятие может использоваться для хранения чего угодно, это своевременно обнаружили, и в результате большинство протоколов текстовые, конфигурационные файлы текстовые. Что это позволяет? Встраиваться программисту в цепочку работы программ, например, в целях отладки. Кроме того, ascii есть везде, а с юникодом и кодировки есть варианты. Если же это ascii, то мы это всегда увидим. Кроме того, можно взять бинарный файл и вычленить из него строки. Для этого есть, например, команда strings.
В любом случае, лучше про ascii не забывать, и очередным подтверждением является то, что в юникоде каждый символ имеет имя, причём заглавными латинскими буквами.
В любом случае, лучше про ascii не забывать, и очередным подтверждением является то, что в юникоде каждый символ имеет имя, причём заглавными латинскими буквами.
{{Парадигмы программирования}}
{{Парадигмы программирования}}
-
{{Lection-stub}}
 

Текущая версия

Через неделю будет экзамен. Список экз. билетов выложен по адресу: http://www.stolyarov.info/pvt/par_exam (возможно, дефис вместо подчёркивания). На всякий случай: лектора можно добыть по электронной почте (адрес уехал в history). Адрес не для публикации, использовать, если что-то необх. сообщить отн. списка вопросов. Возможно, последние два вопроса, если сегодня не успеет их лектор, будут выкинуты.

Технология проведения экзамена. Техн. обусловлена тем, что дост. много людей хотят получить за посещение. На экз. будут принесены ксерокопии, скрепленные степлером, после чего желающим предложат найти себя в коридоре в бумажках и выписать номера в этих списках. В это время в аудитории будут выдаваться билети и юди будут готовиться сдавать экзамен. После выдачи билетов можно подходить и получать экзамен. Ещё один момент: запасайтесь ведомостью заранее. В ведомость можно записывать студентов одной группы.

На 4 балла — все лекции кроме двух, на 3 — 2/3 с округлением вниз. (7 из 11)

Можно ли будет сдать кзамен когда-то ещё? Можно, но это уже будет в сессию. Для этого нужено найти лектора на кафедре и договориться.


Традиционные парадигмы программирования: императивные и всё, что с ними связано (ООП, ...)

Императивная, или фон-неймановская парадигма. Какое самое главное слово в императивном программировании: присваивание. Программа имеет состояние, и она состоит из его изменения. Переменная, как область памяти и присваивание.

В императивном программировании есть неявная составляющая состояния. Мы из теории автоматов знаем, что такое состояние. Есть неявная составляющая состояния: как минимум, значение IP. Эта неявная составляющая является в мышлении некоторых настолько важной, что они не могут написать событийную модель без использования тредов. К сожалению, лектор не смогу убедить в необходимости рассказывать про системный вызов select, позволяющий ожидать одно из множества событий.

....

Вроде бы это разновидность императивного программирования, но образ мышления тут совсем другой.

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

Есть такой человек, Алан Кокс, одно время был senior architect ядра Линукс. Он в своё время сказал такую вещь: компьютер это конечный автомат, и те, кто плодят треды, не знают, как пользоваться компьютером. Альтернатива — только треды. Для тех, кто не может распознать сост. состояния и использовать её.

Теперь мы заговорили на событийно-ориентированное программирование. Известно, что событийно-ориентированные программы приятне всего писать на ОО-языке. Ещё со времён smalltalk'а. Тогда же появилась Симула, которая предназначалась для имитационного меоделирования и хорошо для него подходит. Неоднократно лектору приходилось встречаться с таким утверждением: ООП не более чем разновидность императивного программирования. Утверждение неверное категорически. Откуда оно берётся? Скорее всего из того, что ОО-языки в большинстве своём императиные. С другой стороны, есть Common Lisp Object System [1], но никто же не утверждается, что ООП — это слегка измененное функциональное программирование. Поэтому ОО не является ни функциональным, ни императивным программированием. Как доказать это: для ОО-программирования присваивание является возможностью посторонней. В чистом ОО присваивание быть не может. Что такое присваивание? Это полная замена состояния переменной. Теперь вспоминаем, что такое ООП? В ООП среда выполнения программы представляет как набор чёрных ящиков, называемых объектами, т. е. системами, с внутренностями которых нельзя ознакомиться, только со внешними проявлениями. Известно, что объект может принимать сообщения и отвечать на них. При этом он можнет изменять собственное состояние и обмениваться с другими объектами сообщениями. При этом мы не знаем, сменил ли объект состояние полностью или нет. Потому что это нарушает принцип инкапсуляции. Поэтому присваивание в чистом ОО быть не может. Если же допускается, то это означает, что ЯП поддерживает не только ООП.

С ОО, поговорим о нём ещё. Более практическая терминология заменяет понятие отправки сообщений на понятие "вызов метода". Ответ на сообщение — результат вызова метода. Теперь чуть дальше. В ОО есть классы. Это нечто, фабрика объектов, экземпляров класса. То есть классы это что-то, позволяющее создавать объекты, одинаковые по внутреннему устройству. Отсюда класс есть множество объектов. Конечно, не любое множество объектов является классом. В таких терминах можно определить понятие наследования. Когда мы наследуем, то мы добавляем свойства. Это означает, что мы множество сузили. Когда мы сужаем множество, то мы можем сказать что-то дополнительное о них. При этом A ⊃ B.

Теперь лектор собственно хотел сказать про ещё одну интересную парадигму, точнее, класс языков. Есть класс языков, по крайней мере, большинство из них является императивными, языки эти называются командно-скриптовыми. С точки зрения лектора, класс языки определяется тремя моментами:

  • Строка — наше всё. Строка текста как универсальный представления для любых типов данных, а также самой программы.
  • Развитые и легко применимые средства запуска внешних программ и управления ими.
  • (в принципе, являющеяся, следствием первого) Функция eval.

Почему eval возник здесь? Потому что для кода и для данных одно представление, и программа может во время работы слепить кусок кода и подать его на вход интерпретатору. Где такое ещё есть: в lisp.

Кто-то может сказать, что строка не является общим представлением. Есть такой язык tcl, раньше это было так, сейчас не совсем, но есть полная иллюзия того, что работа всё равно со строками. Когда это становится видно: когда его встраиваем или расширяем. Тогда мы видим, что там возникают полиморфные объекты, но внутри это не видно.

Что здесь интересно: в КС языках очень интересна скорость разработки. Благодаря тому, что есть простое средство управления внешними программами, то можно их очень быстро слепить. Более того, если мы возьмём КС-язык, который изначально был придуман как язык управления заданиями, тот же самый bourne shell, то там мы можем обнаружить такую вещь, как алгебру программ. Так вот, если рассмотривать это как некий объект со стандартным вводом, выводом и командной строкой, то можно заметить два способа суперпозиции: конвейер и обратные апострофы.

Кроме того, это позволяет связывать программы, в том числе, написанные с использованием разных парадигм.

Последнее, что лектор хочет сказать: а давайте посмотрим внимательно на понятие ascii-текст. Вообще, это понятие может использоваться для хранения чего угодно, это своевременно обнаружили, и в результате большинство протоколов текстовые, конфигурационные файлы текстовые. Что это позволяет? Встраиваться программисту в цепочку работы программ, например, в целях отладки. Кроме того, ascii есть везде, а с юникодом и кодировки есть варианты. Если же это ascii, то мы это всегда увидим. Кроме того, можно взять бинарный файл и вычленить из него строки. Для этого есть, например, команда strings.

В любом случае, лучше про ascii не забывать, и очередным подтверждением является то, что в юникоде каждый символ имеет имя, причём заглавными латинскими буквами.


Введение в парадигмы программирования


01 02 03 04 05 06 07 08 09 10 11


Календарь

Сентябрь
24
Октябрь
01 08 15 22 29
Ноябрь
05 12 19 26
Декабрь
03

Экзамен по курсу пройдёт 10 декабря 2009 года в 18:00 в аудитории 524. | Список экзаменационных вопросов


Эта статья является конспектом лекции.
Личные инструменты
Разделы