В интернете можно найти много разной информации о создании чертежей в формате SVG. Чаще предлагается какой то редактор и экспорт из формата DXF в SVG. Просматривая код SVG сразу видно что там много лишнего. Созданный в одном редакторе файл SVG не всегда может корректно открыться в другом. Одно радует, что браузеры начали поддерживать SVG формат. Всюду пишут про недостатки использования SVG. А может надо придерживаться единых правил структуры файла для отображения чертежей?Читать полностью »
Рубрика «ооп» - 38
Создаём чертёж в формате SVG, часть 1
2013-06-28 в 10:11, admin, рубрики: cad, cad online, CAD/CAM, svg, векторная графика, ооп, сапр, метки: cad, cad online, svg, векторная графика, сапрСУБД Caché. Деревообработка — SQL доступ к многомерным структурам данных
2013-06-27 в 6:32, admin, рубрики: intersystems cache, nosql, sql, sqlmap, Блог компании InterSystems, ооп, метки: InterSystems cache, nosql, sqlmap, ооп «Caché предоставляет программистам свободу в выборе способа хранения и доступа к данным через объекты, SQL, либо путем прямого доступа к многомерным структурам данных. Независимо от способа доступа, все данные в базах данных Caché хранятся в многомерных массивах.»
Технологический справочник Caché
«Глобалы (глобальные хранимые переменные) – абстракция B-tree структур, используемых в MUMPS для хранения больших объемов данных.»
A Universal NoSQL Engine, Using a Tried and Tested Technology
В статье — пара примеров создания SQL проекций на различные структуры глобалов.
Читать полностью »
Развитие пользовательских типов данных в программировании
2013-06-26 в 5:14, admin, рубрики: c++, fortran, haskell, perl, ооп, Программирование, функциональное программирование, метки: c++, fortran, haskell, perl, Лисп, Программирование Хотелось бы остановиться и посмотреть на развитие языков программирования с точки зрения развития пользовательских типов данных (ПТД).
Сразу хочу оговориться, под пользователями понимаются программисты, как люди, пишущие код на этих языках. Ну, и те, кто этот код сопровождает или просто читает.
Пользовательские типы данных — это типы данных, которые могут быть созданы пользователем на основе того, что доступно в языке.
Пользователи желают иметь примерно такие типы данных
Пользователи хотели иметь возможность составлять данные так, как они сами того хотят. Хотели, хотят, и наверняка будут хотеть. Всё больше, всё разнообразней и сильнее.
Именно поэтому полезно проследить за развитием пользовательских типов данных в программах и языках программирования.
Читать полностью »
Управление доступом к атрибутам класса в питоне
2013-06-23 в 11:25, admin, рубрики: class, python, ооп, Песочница, метки: class, python, оопВ этой заметке я хотел бы привести краткое описание методов регулирования доступа к атрибутам класса в питоне с помощью декораторов и с помощью присвоения специальным образом имен атрибутам в соответсвии с хорошим стилем программирования, описанным в PEP 8 . Статья написана на основе обсуждений данной темы на StackOverflow.com, нескольких мануалов и личного опыта автора.
Занимаясь написанием программ, выполняющие научные расчеты, я перешел с c++
на питон, чтобы использовать всю мощь библиотек, к которым относятся numpy, scipy, matplotlib, pyquante и прочие, распространяющиеся под свободной лицензией и находящихся в избытке на github. Однако, на начальном этапе такого перехода у меня возник дискомфорт, связанный с отсутствием таких привычных в с++ модификаторов доступа, как privat
, public
и protected
, а также методов get()
и set()
, что и побудило меня написать эту заметку. На StackOverflow первое, что бросается в глаза при обсуждении отсутствия модификаторов доступа в питоне, — это всеобщее согласие с большой долей ответственности разработчика при написании кода, которая побуждает его соблюдать хороший стиль программирования, описанный в PEP 8 . Проблема заключается в том, что в питоне всегда можно получить доступ к любому атрибуту любого класса, однако, согласно хорошему стилю, такой доступ пользователями библиотеки классов должен быть осуществлен не прямо, а с помощью некоторого интерфейса и только там, где это нужно и предусмотрено разработчиком.
Рассмотрим класс, содержащий атрибут attr
:
class MyClass:
def __init__(self):
self.attr = 0
Существует очевидная возможность доступа к атрибуту напрямую после создания объекта класса:
a=Class()
a.attr
Этим способом обращения лучше не злоупотреблять. Для того, чтобы имитировать наличие модификатора доступа privat, можно использовать подчеркивание в начале всех имен атрибутов:
class MyClass:
def __init__(self):
self._attr = 0
Конечно, в этом случае к атрибуту можно обратиться извне класса как:
a._attr
Но каждый раз видя этот код вы будете знать, что: а) осуществляется обращения к атрибуту объекта а
и б) ваш код не соответствует хорошему стилю программирования, поскольку атрибут этого класса с таким именем не предусматривает, что к нему будут обращаться вне определения класса.
Если все же есть необходимость предоставить пользователю доступ к атрибуту данного класса, лучше использовать декоратор @property
. Например:
class MyClass:
def __init__(self):
self.attr = 0
@property
def attr(self):
return self._attr
Прототипно-ориентированный JavaScript и совсем немножко кодинга
2013-06-16 в 0:00, admin, рубрики: javascript, prototype, ооп, ооп js, Программирование, метки: javascript, prototype, ооп, ооп jsМоя попытка проникнуться прототипами в JavaScript. Что из этого получилось, и стоит ли развиваться в данном направлении?
Статья состоит из объяснения прототипов в JavaScript на примерах, затем я рассказываю о своей попытке углубиться и сделать набросок относительно сложного VC каркаса, в конце я задам и предложу ответить на философский вопрос: «Чистый прототипно-ориентированный или объектно-ориентированный подход с применением классов?».
Статья полна субъективными рассуждениями, не претендующими называться экспертными, но тем не менее скорей всего будут полезна тем, кто идет по пути к использованию прототипов.
Читать полностью »
Backstreet Access To Intersystems Cache’
2013-06-14 в 9:46, admin, рубрики: intersystems, intersystems cache, web, zen, Веб-разработка, знакомство, ооп, разработка, СУБД, субд Caché, метки: cache, InterSystems, InterSystems cache, web, zen, знакомство, СУБД, субд CachéИндексация неатомарных атрибутов
2013-06-14 в 4:56, admin, рубрики: cache, dbms cache, intersystems cache, nosql, OODB, sql, Блог компании InterSystems, высокая производительность, ооп, оптимизация запросов, субд Caché, метки: cache, dbms cache, InterSystems cache, nosql, OODB, sql, высокая производительность, ооп, оптимизация запросов, субд CachéЦитаты из википедии (1NF):
Каждое пересечение строки и столбца содержит ровно одно значение из соответствующего домена (и больше ничего).
Одно и то же значение может быть атомарным или неатомарным в зависимости от смысла этого значения. Например, значение «4286» является
- атомарным, если его смысл — «пин-код кредитной карты» (при разбиении на части или переупорядочивании смысл теряется)
- неатомарным, если его смысл — «набор цифр» (при разбиении на части или переупорядочивании смысл не теряется)
В данной статье будут рассмотрены стандартные способы ускорения SQL-запросов по таким полям, как строка, дата, простой список (в формате $LB), коллекции-cписки и коллекции-массивы.
Оглавление:
Полиморфизм без виртуальных функций
2013-06-10 в 13:05, admin, рубрики: c++, CRTP, pattern, sfinae, virtual, ненормальное программирование, ооп, полиморфизм, метки: c++, CRTP, pattern, sfinae, virtual, ооп, полиморфизмВ этой статье представлен паттерн, который может быть использован для обеспечения динамического связывания без использования виртуальных функций для вызова перегруженных методов для объектов неоднородного контейнера при его обходе. Читать полностью »
Советы новичкам при проектировании модульных производственных систем
2013-06-04 в 18:30, admin, рубрики: .net, Анализ и проектирование систем, ооп, ошибки, проектирование, метки: .net, ошибки, проектирование В этой статье я попытаюсь поделиться своим опытом в проектировании пользовательской бизнес-логики. Это явно не претендует на полноценный ликбез, т.к. я всего лишь вспоминаю то, через что прошёл лично я, какие ошибки я допустил, и как мне их удалось (или не удалось) исправить в будущем. Наверняка, опытные системные архитекторы уже все проходили и знают, однако надеюсь, что некоторые советы таки будут полезны.
Мы использовали (и используем) клиентскую часть на WPF/Silverlight, WCF сервисы и СУБД Oracle, Postrges, MsSQL. Код написан по MVVM, использована Prism для модульности и навигации. Не могу точно сказать, какие из тезисов подойдут для других платформ и языков.
Так сложилось, что в какой-то момент мне, совершенно заурядному на то время программисту, выпала задача проектировать большую и сложную систему учета данных с большим количеством условий, переходов, этапов работы. Система была предназначена для ввода данных о жителях, регулярных заседаний по выдаче им пропусков и отказов, продления пропусков, прекращения их деятельности, штрафов, и многих других мелочей. Сейчас ядро системы уже большей частью переписано, говнокод исчез, использованы новые и последние технологии, платформы.
Итак, поехали.
Читать полностью »
Классы в lua, или избавляемся от двоеточия
2013-06-03 в 19:13, admin, рубрики: Lua, классы, ненормальное программирование, ооп, метки: lua, классы, ооп Как всем известно, в lua нет как таковых классов и объектов. Однако есть метатаблицы и синтаксический сахар.
С помощью указанных механизмов достаточно просто реализовать подобие классов.
В итоге и получается нечто такое:
local MyClass = {} -- the table representing the class, which will double as the metatable for the instances
MyClass.__index = MyClass -- failed table lookups on the instances should fallback to the class table, to get methods
-- syntax equivalent to "MyClass.new = function..."
function MyClass.new(init)
local self = setmetatable({}, MyClass)
self.value = init
return self
end
function MyClass.set_value(self, newval)
self.value = newval
end
function MyClass.get_value(self)
return self.value
end
local i = MyClass.new(5)
-- tbl:name(arg) is a shortcut for tbl.name(tbl, arg), except tbl is evaluated only once
print(i:get_value()) --> 5
i:set_value(6)
print(i:get_value()) --> 6
Всё это конечно хорошо, даже при определённой сноровке можно реализовать наследование…
Но где public и private члены класса? Дефакто в этом примере они все public. Да ещё и надо помнить, где использовать двоеточие:
MyClass:myFunc()
а где просто одну точку:
MyClass.myOtherFunc()
А статические члены класса? Неужели придётся отказываться?
Читать полностью »