Форум программистов, компьютерный форум, киберфорум
ООП и паттерны
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.92/63: Рейтинг темы: голосов - 63, средняя оценка - 4.92
5 / 3 / 2
Регистрация: 27.04.2022
Сообщений: 63

Понимание основ ООП

27.04.2022, 16:33. Показов 16926. Ответов 188
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

Начал изучать ООП и сразу возникло непонимание на изучении классов.

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

Соответственно, при создании объектов мне необходимо будет для каждого из них задавать свойство, допустим, «Температура» или языки ООП позволяют создать некое «глобальное, общее» свойство и при создании конкретного объекта я смогу присваивать ему это «глобальное» свойство, задавая лишь значение?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.04.2022, 16:33
Ответы с готовыми решениями:

ООП, понимание абстрактных классов/методов и т.п
Работаю программистом и столкнулся с тем, что на проекте отказались от абстрактного класса в пользу интерфейса, но я не совсем понимаю...

Знание основ ООП/Джава
Здравствуйте. Хочу записаться на курсы по Java, но там требование: знание основ ООП/Java. Подскажите, что именно входить в знание основ...

освоение основ
я учусь на инженера программного обеспечения на втором курсе. Нам дают всего по чу-чуть, возникла нужда в самообразовании. Как я выяснил...

188
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
17.06.2022, 00:31
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Shamil1 Посмотреть сообщение
В главе 2 это тоже показывается - передача сообщений и разная реакция объектов на одинаковые сообщения. И называется это "функциональным программированием".
Нет. В главе 2 это называется Data-directed programming.

Добавлено через 7 минут
Цитата Сообщение от Shamil1 Посмотреть сообщение
Как я понял из описания, эта лекция основана на подглаве 2.1. из книги.
Ты путаешь причину и следствие. Книга основана на этих лекциях.

Цитата Сообщение от Shamil1 Посмотреть сообщение
Как я понял из описания, эта лекция основана на подглаве 2.1. из книги. В этой подглаве (и главе в целом) нет никакого намёка на ООП. Там даже императивное программирование не упоминается. Операция присваивания вводится только в главе 3.
Нет. Книга с тех пор претерпела некоторые изменения, но эта лекция примерно соответствует секции3.3.4.

Цитата Сообщение от Shamil1 Посмотреть сообщение
Я не хочу слушать часовую лекцию на английском языке только для того, чтобы найти, в каком контексте там упоминается ООП.
А я не очень хочу спорить с человеком, зациклившемся на каких-то догматах и не желающем слушать собеседника. )

Цитата Сообщение от Shamil1 Посмотреть сообщение
По ссылке говорится: "вот для чего мы изобрели ООП". И мне непонятно, каким образом это связано с SICP (книгой) и описанными там техниками.
Напрямую. Это видео --- это самый первозданный SICP.
1
Модератор
Эксперт функциональных языков программирования
3142 / 2290 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
17.06.2022, 02:16
Цитата Сообщение от korvin_ Посмотреть сообщение
Нет. В главе 2 это называется Data-directed programming.
В главе 2 это тоже показывается (не путать с "называется") - передача сообщений и разная реакция объектов на одинаковые сообщения. И (позже) называется это "функциональным программированием".

3.1.3.
Programming without any use of assignments, as we did throughout the first two chapters of this book, is accordingly known as functional programming.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
17.06.2022, 02:31
Цитата Сообщение от Shamil1 Посмотреть сообщение
В главе 2 это тоже показывается (не путать с "называется") - передача сообщений и разная реакция объектов на одинаковые сообщения.
Нет, там показывается явное построение таблицы диспетчеризации по типу данных. В ООП нет ни таблицы, ни типов. Только в статически-типизированных языках, т.к. иначе статичность типизации не обеспечить, но это просто workaround.

Цитата Сообщение от Shamil1 Посмотреть сообщение
И (позже) называется это "функциональным программированием".
Нет, не называется. Цитату приведи со ссылкой.

ФП рассматривается только в начале (про нормальный порядок вычислений) и в главе про потоки (streams).

Цитата Сообщение от Shamil1 Посмотреть сообщение
3.1.3.
Programming without any use of assignments, as we did throughout the first two chapters of this book, is accordingly known as functional programming.
И? Далее в 3.3.4, про которую я говорил, есть assignment.

А DDP из второй главы использует присваивание (точнее mutable state) --- процедуру put:

Here is how data-directed programming can be used in the complex-number system. Ben, who developed the rectangular representation, implements his code just as he did originally. He defines a collection of procedures, or a package, and interfaces these to the rest of the system by adding entries to the table that tell the system how to operate on rectangular numbers. This is accomplished by calling the following procedure:

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
(define (install-rectangular-package)
  ;; internal procedures
  (define (real-part z) (car z))
  (define (imag-part z) (cdr z))
  (define (make-from-real-imag x y) (cons x y))
  (define (magnitude z)
    (sqrt (+ (square (real-part z))
             (square (imag-part z)))))
  (define (angle z)
    (atan (imag-part z) (real-part z)))
  (define (make-from-mag-ang r a) 
    (cons (* r (cos a)) (* r (sin a))))
  ;; interface to the rest of the system
  (define (tag x) (attach-tag 'rectangular x))
  (put 'real-part '(rectangular) real-part)
  (put 'imag-part '(rectangular) imag-part)
  (put 'magnitude '(rectangular) magnitude)
  (put 'angle '(rectangular) angle)
  (put 'make-from-real-imag 'rectangular 
       (lambda (x y) (tag (make-from-real-imag x y))))
  (put 'make-from-mag-ang 'rectangular 
       (lambda (r a) (tag (make-from-mag-ang r a))))
  'done)
Это гораздо больше похоже на расширяемый tagged union (discriminated union, OR-type), чем на ООП, типа как реализованы исключения в Ocaml.

А фраза, которую ты процитировал, говорит, что ФП использовалось в перввых двух главах, но не говорит, что исключительно ФП.

Добавлено через 2 минуты
For now, we can assume that put and get are included in our language. In chapter 3 (section 3.3.3, exercise 3.24) we will see how to implement these and other operations for manipulating tables.
Ну а 3.3.3 всё про мутабельность.
0
Модератор
Эксперт функциональных языков программирования
3142 / 2290 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
17.06.2022, 02:55
Цитата Сообщение от korvin_ Посмотреть сообщение
А DDP из второй главы использует присваивание (точнее mutable state) --- процедуру put:
put используется для регистрации типа в специальной таблице (for manipulating the operation-and-type table) при инсталяции пакета (в функции install-rectangular-package).
put не является mutable state используемых объектов.
при желании можно обойтись без функции install-rectangular-package, а таблицу таблицу сделать read only, если зарегистрировать все типы одновременно.

Добавлено через 7 минут
Цитата Сообщение от korvin_ Посмотреть сообщение
но не говорит, что исключительно ФП
Programming without any use of assignments, as we did throughout the first two chapters of this book, is accordingly known as functional programming.
В первых двух главах авторы использовали программирование без присваивания и авторы называют это ФП. Присваивание вводится позже. А put используется исключительно в программе инсталяции пакета.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
17.06.2022, 11:37
Цитата Сообщение от Shamil1 Посмотреть сообщение
при желании можно обойтись без функции install-rectangular-package, а таблицу таблицу сделать read only, если зарегистрировать все типы одновременно.
Тогда ты не сможешь в другом месте описывать объекты с таким же интерфейсом. И это сводится к OR-типу или вообще typecase. Пример не про это.

Цитата Сообщение от Shamil1 Посмотреть сообщение
А put используется исключительно в программе инсталяции пакета.
И к ФП он отношения не имеет.
0
Модератор
Эксперт функциональных языков программирования
3142 / 2290 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
17.06.2022, 14:52
Цитата Сообщение от korvin_ Посмотреть сообщение
Тогда ты не сможешь в другом месте описывать объекты с таким же интерфейсом. И это сводится к OR-типу или вообще typecase. Пример не про это.
Не смогу. Но я смогу описать сразу все типы в одном месте. Передача сообщений и разная реакция объектов на одинаковые сообщения в примере присутствует.

Цитата Сообщение от korvin_ Посмотреть сообщение
И к ФП он отношения не имеет.
Да, put к ФП отношения не имеет. Если я правильно помню, в книге в одной из сносок об этом явно написано.

Цитата Сообщение от korvin_ Посмотреть сообщение
Это видео --- это самый первозданный SICP.
Вы утверждаете, что книга была написана на основе этого конкретного видео?
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
18.06.2022, 05:51
Цитата Сообщение от Shamil1 Посмотреть сообщение
Вы утверждаете, что книга была написана на основе этого конкретного видео?
Нет, я утверждаю, что это конкретное видео --- курс SICP, в исполнении его авторов, по первому изданию книги.

Добавлено через 56 секунд
Цитата Сообщение от Shamil1 Посмотреть сообщение
Но я смогу описать сразу все типы в одном месте. Передача сообщений и разная реакция объектов на одинаковые сообщения в примере присутствует.
Первое противоречит второму.
0
Модератор
Эксперт функциональных языков программирования
3142 / 2290 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
18.06.2022, 10:08
Цитата Сообщение от korvin_ Посмотреть сообщение
Нет, я утверждаю, что это конкретное видео --- курс SICP, в исполнении его авторов, по первому изданию книги.
Из того, что в одной лекции в 2005 (?) году - через 20 лет после написания книги - лектор вскользь упомянул ООП, не следует, что в первых лекциях лекторы упоминали ООП. По крайней мере, в книге ООП упоминается только по отношению к иерархии типов.

В любом случае, на сегоднешний момент классическими книгами по ООП являются "Мейер Б. Объектно-ориентированное конструирование программных систем" и "Буч Г. Объектно-ориентированный анализ и проектирование". Первую по фундаментальности приравнивают к многотомнику Д. Кнута по алгоритмам. Вторая имеет менее формальный и более описательный характер. Любители С++ часто ориентируются на Страуструпа. И есть ещё (немногочисленные) любители А. Кея. Все 4 вышеперечисленных автора считают наследование обязательным требованием для ООП.

Цитата Сообщение от korvin_ Посмотреть сообщение
Первое противоречит второму.
Не вижу противоречия.
0
 Аватар для Tavashi
1172 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,858
18.06.2022, 13:39
Цитата Сообщение от Shamil1 Посмотреть сообщение
Все 4 вышеперечисленных автора считают наследование обязательным требованием для ООП.
На основании этого их определение ООП стало общепринятым, верно?
0
Модератор
Эксперт функциональных языков программирования
3142 / 2290 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
18.06.2022, 20:54
Цитата Сообщение от Tavashi Посмотреть сообщение
На основании этого их определение ООП стало общепринятым, верно?
Нет.
0
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
19.06.2022, 15:29
Цитата Сообщение от Shamil1 Посмотреть сообщение
Все 4 вышеперечисленных автора считают наследование обязательным требованием для ООП.
Все четыре автора описывают класс-бэйзед ООП.
В прототипном ООП нет наследования - есть копирование. При этом иерархия классов отсутствует.
0
Модератор
Эксперт функциональных языков программирования
3142 / 2290 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
20.06.2022, 13:43
Цитата Сообщение от vantfiles Посмотреть сообщение
В прототипном ООП нет наследования - есть копирование. При этом иерархия классов отсутствует.
В общем случае, класс - это функция, создающая объект ("по образцу"). В этой теме можно найти примеры "классов" на Lisp.

На javascript:
JavaScript
1
2
3
4
5
6
7
// Initialize a constructor function for a new Hero
function Hero(name, level) {
  this.name = name;
  this.level = level;
}
 
let hero1 = new Hero('Bjorn', 1);
В общем случае, наследование - это расширение функциональности класса.
(Хотя, в некоторых языках есть "сужающее наследование". Лично я не считаю это ООП.)

На javascript:
JavaScript
1
2
3
Hero.prototype.greet = function () {
  return `${this.name} says hello.`;
}
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Initialize Warrior constructor
function Warrior(name, level, weapon) {
  // Chain constructor with call
  Hero.call(this, name, level);
 
  // Add a new property
  this.weapon = weapon;
}
 
// Initialize Healer constructor
function Healer(name, level, spell) {
  Hero.call(this, name, level);
 
  this.spell = spell;
}
Кроме наследования "является", есть ещё наследование "умеет" (в C# это наследование от интерфейса). Оно служит для программирования с использованием Абстрактных Типов Данных. Лично я такое наследование не считаю за ООП, хотя тут со мной многие не согласятся, и формально будут правы.

В языках с динамической типизацией интерфейс не обязательно описывать явно. Осознанное использование утиной типизации можно считать неявным наследованием от интерфейса (объект реализует неявный интерфейс. мы ожидаем, что он умеет обрабатывать такие сообщения).

з.ы. "метод" в C# - это сокращение от "метод обработки сообщений".

Добавлено через 23 минуты
Примеры на IO:

Наследуем класс Vehicle от класса Object (расширяем, добавляя свойство и метод):
Code
1
2
3
Vehicle := Object clone
Vehicle description := "Something to take you places"
Vehicle drive := method("vroom" print writeln)
0
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
20.06.2022, 14:11
Цитата Сообщение от Shamil1 Посмотреть сообщение
Лично я такое наследование не считаю за ООП
Это понятно. Хотя я не согласен, но это уже мое мнение.

Спасибо за примеры, они весьма показательны.

Цитата Сообщение от Shamil1 Посмотреть сообщение
В общем случае, класс - это функция, создающая объект ("по образцу").
Еще раз объясняю, в прототайп-бейзед ООП я могу сперва создать методы объекта, а потом на их основе без всяких функций собрать несколько объектов-прототипов, которые потом могут быть расклонированы с помощью ф-ции deep_copy.
А могут быть и просто наштампованы в цикле по единой схеме.

Добавлено через 17 минут
В настоящее время я использую два языка - C++ и Lua.
Я понимаю недостатки ООП в этих двух моделях.
Фокус в том, что в C++ я не могу управлять действиями new в полной мере. А в Lua мне этому ничего не мешает.
Это серьезное отличие этих двух моделей - первая подразумевает иерархию - и запрещает менять предка.
Вторая иерархию теряет, но позволяет абсолютно все - в том числе и удаление методов.
0
Модератор
Эксперт функциональных языков программирования
3142 / 2290 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
20.06.2022, 14:12
Цитата Сообщение от vantfiles Посмотреть сообщение
Все четыре автора описывают класс-бэйзед ООП.
Это связано с тем, что ведущие эксперты по ООП занимаются крупными и сложными проектами. Языки с динамической типизацией для таких проектов не подходят (если в них нельзя потребовать или имитировать статическую проверку типов).
0
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
20.06.2022, 14:26
Цитата Сообщение от Shamil1 Посмотреть сообщение
крупными и сложными проектами. Языки с динамической типизацией для таких проектов не подходят
World of Warcraft

Впрочем, есть список побольше: https://ru.wikipedia.org/wiki/... е_язык_Lua

Мне тоже сложно представить крупную разработку чисто на встраиваемом языке. Но как язык для предметно-ориентированного проектирования/программирования он великолепен.
0
Модератор
Эксперт функциональных языков программирования
3142 / 2290 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
20.06.2022, 14:46
Цитата Сообщение от vantfiles Посмотреть сообщение
Хотя я не согласен, но это уже мое мнение.
В данном случае, скорее Ваше мнение является общепринятым, а не моё.

Цитата Сообщение от vantfiles Посмотреть сообщение
Еще раз объясняю, в прототайп-бейзед ООП я могу сперва создать методы объекта, а потом на их основе без всяких функций собрать несколько объектов-прототипов, которые потом могут быть расклонированы с помощью ф-ции deep_copy.
Так как есть возможность клонировать объекты, то каждый объект одновременно является описанием класса.
Например, в IO нет синтаксической разницы между созданием нового класса и созданием экземпляра. Семантическая разница выражается в том, что имя класса начинается с заглавной буквы (но программист не обязан придерживатся такого соглашения).

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

В C++, насколько я помню, есть закрытое наследование (то есть, наследование реализации без наследования интерфейса).

Добавлено через 8 минут
Цитата Сообщение от vantfiles Посмотреть сообщение
World of Warcraft
Наверное, в WoW Lua можно использовать для расширения UI? Сам проект (движок и т.д.) написан на другом языке?

У динамических языков есть свои преимущества, иначе бы их никто не использовал. Но не случайно в них добавляют статическую типизацию (TypeScript, "option explicite" в VB 6.0, Typed Racket и т.д.)

Lisp
1
2
3
4
5
6
7
#lang racket
(struct pt (x y))
 
; distance : pt pt -> real
(define (distance p1 p2)
  (sqrt (+ (sqr (- (pt-x p2) (pt-x p1)))
           (sqr (- (pt-y p2) (pt-y p1))))))
Lisp
1
2
3
4
5
6
7
#lang typed/racket
(struct pt ([x : Real] [y : Real]))
 
(: distance (-> pt pt Real))
(define (distance p1 p2)
  (sqrt (+ (sqr (- (pt-x p2) (pt-x p1)))
           (sqr (- (pt-y p2) (pt-y p1))))))
Добавлено через 4 минуты
p.s. Если я правильно помню, "хаскель-академики" пытались прикрутить статическую типизацию к erlang, но у них не получилось.
0
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
20.06.2022, 15:02
Цитата Сообщение от Shamil1 Посмотреть сообщение
статическую типизацию
Да чем она так хороша? Тем, что программа как елка на НГ обвешена определениями типов?
Разработка через тестирование вполне решает возможные проблемы.
Обвешать всю программу ассертами?
Использовать статические анализаторы кода? Так они в основном занимаются проверками соответствия типов.
0
Модератор
Эксперт функциональных языков программирования
3142 / 2290 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
20.06.2022, 15:33
Цитата Сообщение от vantfiles Посмотреть сообщение
Да чем она так хороша?
1. Возможностью выразить идею (абстракцию) более явно.
2. Количеством проверок, которые должна сделать библиотечная функция, чтобы не сгенерировать непонятное исключение (типа NRE).
3. Количеством ошибок, которые отлавливаются на этапе компиляции.

Добавлено через 6 минут
Абстракция характеризуется предусловиями, постусловиями, инвариантами и исключениями. Чем больше из этого можно выразить явно в коде, тем лучше (код будет проще понимать и сопровождать).

Добавлено через 4 минуты
И, кстати, языки, которые требуют правильного выравнивая кода, лучше тех, которые не требуют.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
23.06.2022, 22:27
Цитата Сообщение от Shamil1 Посмотреть сообщение
Из того, что в одной лекции в 2005 (?) лектор вскользь упомянул ООП, не следует, что в первых лекциях лекторы упоминали ООП
Во-первых, это не "одна лекция", а полный курс: https://www.youtube.com/watch?... CABEA24090
Во-вторых, не в 2005-м, а в 1986-м.
В-третьих, не просто "лектор", а Джеральд Сассман, один из авторов SICP и создателей Scheme.

Цитата Сообщение от Shamil1 Посмотреть сообщение
В любом случае, на сегоднешний момент классическими книгами по ООП являются "Мейер Б. Объектно-ориентированное конструирование программных систем" и "Буч Г. Объектно-ориентированный анализ и проектирование".
Нет. Первая не про ООПрограммирование, а вторая вообще давно не котируется. Разве что в сугубо бюрократических организацияях.

Цитата Сообщение от Shamil1 Посмотреть сообщение
Не вижу противоречия.
Противоречие в том, что объекты в ООП могут происходить из разных мест, в разное время, это противоречит существованию единого места диспетчеризации по типу. Да и позднему связыванию не способствует. Ты даже продвигаемое тобой наследование нормально не опишешь в такой схеме.

Цитата Сообщение от Shamil1 Посмотреть сообщение
ведущие эксперты по ООП занимаются крупными и сложными проектами
Это какие такие эксперты, например?

Цитата Сообщение от Shamil1 Посмотреть сообщение
Языки с динамической типизацией для таких проектов не подходят
Питер Норвиг, например --- эксперт или нет? А в Netflix, насколько я слышал, очень ценят программистов на Clojure и считают их наиболее продуктивными.

Цитата Сообщение от Shamil1 Посмотреть сообщение
1. Возможностью выразить идею (абстракцию) более явно.
Но ограниченное (меньшее, чем в ДТ) количество идей. В TAPL об этом упоминалось, ЕМНИП.

Цитата Сообщение от Shamil1 Посмотреть сообщение
Абстракция характеризуется предусловиями, постусловиями, инвариантами и исключениями. Чем больше из этого можно выразить явно в коде, тем лучше (код будет проще понимать и сопровождать).
Явно в коде это можно выразить и в ДТ-языках. Причём более гибко, зависимо от рантайм-данных. Языки с зависимыми типа делают тут некоторые подвижки для СТ, но они очень далеко не в мейнстриме.

Добавлено через 5 минут
Цитата Сообщение от Shamil1 Посмотреть сообщение
2. Количеством проверок, которые должна сделать библиотечная функция, чтобы не сгенерировать непонятное исключение (типа NRE).
Java --- язык со СТ, но NPE там бывает вполне часто. Плохая СТ не особо помогает. А хорошими мало кто пользуется.

Я уж не говорю про C --- типизация вроде статическая, а на деле полный П.
0
Модератор
Эксперт функциональных языков программирования
3142 / 2290 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
24.06.2022, 12:22
Цитата Сообщение от korvin_ Посмотреть сообщение
Во-первых, это не "одна лекция", а полный курс: https://www.youtube.com/watch?... CABEA24090
Во-вторых, не в 2005-м, а в 1986-м.
В-третьих, не просто "лектор", а Джеральд Сассман, один из авторов SICP и создателей Scheme.
В одной лекции упомянул. Или Вы утверждаете, что он в каждой лекции упоминает ООП?
Сам курс подписан "© 2001–2022 Massachusetts Institute of Technology". Или Вы утверждаете, что данное видео записано в 1886 году?
Но самое главное - упомянул вскользь.

Цитата Сообщение от korvin_ Посмотреть сообщение
Первая не про ООПрограммирование, а вторая вообще давно не котируется. Разве что в сугубо бюрократических организацияях.
Я с Вами не согласен.

Цитата Сообщение от korvin_ Посмотреть сообщение
Противоречие в том, что
Передача сообщений и разная реакция объектов на одинаковые сообщения в примере перестанет присутствовать?

Цитата Сообщение от korvin_ Посмотреть сообщение
Питер Норвиг, например --- эксперт или нет? А в Netflix, насколько я слышал, очень ценят программистов на Clojure и считают их наиболее продуктивными.
Питер Норвиг - эксперт. Про Netflix не знаю, что они там пишут на Clojure.

Цитата Сообщение от korvin_ Посмотреть сообщение
Явно в коде это можно выразить и в ДТ-языках. Причём более гибко, зависимо от рантайм-данных.
Добавлением 100500 проверок?

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

Цитата Сообщение от korvin_ Посмотреть сообщение
Языки с зависимыми типа делают тут некоторые подвижки для СТ, но они очень далеко не в мейнстриме.
К сожалению.

Цитата Сообщение от korvin_ Посмотреть сообщение
Я уж не говорю про C --- типизация вроде статическая, а на деле полный П.
Сильная типизация - более критичное требование. Лучше сильная ДТ, чем слабая СТ.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.06.2022, 12:22

Тесты на знание основ C++
Здравствуйте. Помогите найти тестовые задания по основам программирования на языке с++. Нужно много тестовых заданий (порядка 200-300), по...

Нужны основы основ
Доступ к полям таблиц баз данных FireBird в в среде разработки Builder C++

Разбор основ qt widtgets
Здравствуйте! В первый раз создал qt gui приложение и сразу появилось множество вопросов. Вот код: header.h ...... namespace Ui...

C для изучения основ программирования
Как вы думаете, подходит ли c как язык для изучения основ программирования и погружения в IT сферу. Имею опыт программирования на Python,...

Что изучать после основ?
Всем доброго времени суток, пробуксировал учебник по плюсам, теперь знаю основы от выделения памяти под переменную, до умных указателей,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
180
Ответ Создать тему
Новые блоги и статьи
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru