Feb 23, 2011 22:41
"есть такое мнение"(с), что тот кому нравится Python - "в душе - голландец", а тот кому нравится Ruby - "в душе - японец".
с этой точки зрения - С/С++/С# штука, несомненно замешанная на англосаксонском праве и способе мышления.
и про это забывать нельзя. потому как базовые термины - которые собственно определяют правила понимания и способ организации мысли - выраженные в исконно-английском стиле при "наивном" переводе теряют некторые важнейшие нюансы, и наоборот, приобретают некоторые дполнительные смыслы, изгачально в них не заложенные. отчего возникают серьезные погрешности восприятия.
например, я не знаю какой шибко умный человек впервые перевел, категорию доступа "protected" как "защищенный", но заслуживает он за свою невнимательность самого серьезного порицания.
группа понятий, описывающая семантику доступа - "публичный"-"защищенный"-"приватный" - с точки зрения русского языка видится не иначе как треугольником. "публичный" - "приватный" составляют вполне связную шкалу, но слово "защищенный" эту шкальность херит на корню.
на английском же private/protected/public составляют довольно четкую линейку "увеличения возможностей":
- private - "закрытый", доступный "только себе";
- protected - доступный "только для своих, себе и потомкам", "по-блату". семантика "протекции и патронажа", но никак не "защиты от врагов";
- public - всем и полностью доступный.
[ необходимая ремарка:
надо заметить что "C# как язык" унаследовал эту шкалу от "древних" стандартов C/C++. для совместмости и преемственности.
реально же внутри CLR система более современная: см соответствие "термин CLR = термин C#"
Private = private
Family = protected
Family-And-Assembly = (...такое-отсутсвует-в-С#...)
Assembly = internal
Family-Or-Assembly = protected internal
Public = public
соотвественно в "каноническую" линию добавилось : "internal" - в значении "всем и полностью доступный" "но только в рамках песочницы в которой описан", и "protected internal" - "всем и полностью доступный" как в "рамках песочницы" так и "в рамках родства".
но главное на мой вкус - вместо "protected" используется "Family", которое на русский переводится как "родовой", что гораздо вернее выражает идею...
]
идем дальше.
не менее забавна дихотомия "поле - свойство".
с точки зрения англосакса - field = "поле" = это такое недвижимое имущество. "мааасенький выделенный участок земли" - которое податная душа имела право 0)обрабатывать, 1)кормиться и 2)платить налоги. архетип вбитый в голову еще при Вильгельме Завоевателе с его "Книгой Судного Дня" - росписью податей с каждого занесенного в нее земельного надела.
(на самом деле - с переводом этой концепции на русский дело обстоит несколько смешнее. если я правильно понимаю свою мысль, в первый раз "поле" было обозвано "полем", когда с запада пришла технология ведения БухУчета - искусство ведения амбарных книг и прочее. соответственно, когда слегка попозже словечко field стало попадаться в переводимых книгах по информатике - ему был сопоставлен как-бы-отечественный термин. получается "калька на аллюзию с кальки". вот и оперируй потом подобной кашей в голове... )
в контексте программирования - еще забавна аналогия, что ежели полю не определить правильные права доступа ( = не окужить privat-ным забором из колючей проволоки, или хотя бы protect-ным заборчиком-с-калиточкой-для-своих ) любое внешнее лицо может захотеть воспользоваться возможностью наследить на нем своей грязной пяткой...
далее, property - банально переводимое как "свойство" - на самом деле "собственность". "собственность-на-которую-имеет-право-владелец". а право свое он реализует в том, что по своему усмотрению устанавливает протокол доступа {get; set;}.
но при том - в отличие от поля - это скорее "движимое имущество". "документ". "бумажка". "акция". под нечто что в реальном мире может быть и не воплощено, "но-силу-имеет".
следующая по списку - трихотомия (или как там правильно это обзывается?) объект - класс - интерфейс. ну или квадротомия - если добавить к ним концепцию типа.
объект (object) - на Англосаксонщине - это реальный эсквайр, "имеющий право собственности на надел" (участок выделенной ему памяти).
класс (class) - это "права" эсквайра, записанные в толстой инкунабуле законов, восходящих к Хартии Вольностей. которыми он будет обладать, когда он через божественную операцию new "инстанцируется" из "идеи" в реальном человеке. причем к эсквайру он относится как "его класс" ( = class of ).
интерфейс (interface) - то, какими возможностями и, одновременно, ограничениями этот эсквайр удовлетворяет. забавно что на русский это слово так и не удалось адекватно перевести, а попытка сделать кальку приводит к чему-то вроде "междумордия", душевно приправленному побочными ложноориентирующими ассоциациями...
тип (type) - характеристика (или даже досье на) эсквайра. подразумевается "слои общества, в которые этот эсквайр может быть вхож". "протокол, по которому с ним будут общаться". "ярлык, под которым он будет известен".
соответсвенно операция "проверки типа" - сродни проверке документов. операция "приведения объекта к типу" читается "если уж назвался груздем - полезай в кузов...". а иначе, будем считать тебя как "null" (читай = Пустое Место). и подать сюда Исключение! Городово-о-о-й!!
кстати, с этой точки зрения:
у С# - строгий майорат. класс-предок имеется только один. а вот "побочных" интерфейсов наследник может заиметь сколько угодно. но на что, ни предок, ни потомок, не имеют права - так это самостоятельно вычистить себя из физического мира - это находится в компетенции Сборщика Мусора (читай - Сырой Земли. "все из нее - все в нее". ну или в другом прочтении - Гражданского, Административного и Уголовного Кодекса. или железобетонной как-бы-протестанской этики...)
а С++ - византийщина множественного наследования. плюс каждый, невозбранно, сам-себе-Сборщик -Мусора... ну и там плащи, кинжалы и утечки памяти...
так что холивары C#.vs.С++ имеют под собой ого-го-го-какие хтонические основания.. :)
.net,
мысли-по-поводу