http://www.sql.ru/forum/605052-a/kto-chto-dumaet-ob-uml-moda-proshla
Заметки о тестировании, программировании и прочий "поток сознания", который жалко писать "в стол"
четверг, 28 сентября 2017 г.
Ещё
Цитата: "uml-модели отдаляют заказчика от понимания реальной сути проблемы, а разработчика от понимания того как это всё устроено на уровне "байтов" (Joel)".
(Неточный перевод с немецкого)
(Неточный перевод с немецкого)
Ещё неплохо сказано
Ещё цитата: "c++ uml-модели не нужны ибо там и так есть сильно развитые средства мета-программирования. Надо лишь уметь грамотно ими пользоваться".
Хорошо так сказано
Цитата: "Я не держусь за uml-модели как за ортодоксальный троцкизм. Я применяю их только когда они реально нужны и реально ускоряют разработку. Я их использую по месту, в соответствии с необходимостью, а не везде и всюду, заради кристальной идеи и чистоты арийской рассы".
Про immutable
Последнее время очень хочется "сказать компилятору", что объект неизменяемый.
Что-то вроде:
type TPoint = class
public
X : Integer;
Y : Integer;
costructor Create(aX, aY: Integer);
end; // TPoint
...
Var [Immutable] p : TPoint;
...
p := TPoint.Create(10, 20);
p.X := 30; // - тут компилятор ругается
Ну и естественно методы хочется метить const/noconst.
Я в своих скриптах такое уже почти сделал.
Почти - потому, что компилятор пока не все случаи отлавливает. Но это специфика реализации компилятора скриптов. Слишком уж он гибок. И местами на duckTyping заточен.
Но хотя бы в runTime - ругается. Если в compileTime не распознал.
Что-то вроде:
type TPoint = class
public
X : Integer;
Y : Integer;
costructor Create(aX, aY: Integer);
end; // TPoint
...
Var [Immutable] p : TPoint;
...
p := TPoint.Create(10, 20);
p.X := 30; // - тут компилятор ругается
Ну и естественно методы хочется метить const/noconst.
Я в своих скриптах такое уже почти сделал.
Почти - потому, что компилятор пока не все случаи отлавливает. Но это специфика реализации компилятора скриптов. Слишком уж он гибок. И местами на duckTyping заточен.
Но хотя бы в runTime - ругается. Если в compileTime не распознал.
среда, 27 сентября 2017 г.
Ещё про скрипты
Можно написать:
TPixel VAR Pixel
Pixel := 100
Pixel := px: 100
Pixel := inch: 1
Pixel := cm: 3
Pixel := mm: 300
Pixel := twips: 10
Pixel := m: 3
Pixel := n: 4
Pixel := (default): 100
Т.е. можно задавать значения в разных единицах измерения. И они будут преобразовыватся к типу переменной.
Понятно, что это на самом деле конструктор + определение оператора :=.
TPixel VAR Pixel
Pixel := 100
Pixel := px: 100
Pixel := inch: 1
Pixel := cm: 3
Pixel := mm: 300
Pixel := twips: 10
Pixel := m: 3
Pixel := n: 4
Pixel := (default): 100
Т.е. можно задавать значения в разных единицах измерения. И они будут преобразовыватся к типу переменной.
Понятно, что это на самом деле конструктор + определение оператора :=.
Задумался о программировании GUI в "функциональном" стиле
Как-то так:
RunApplicationWithForms: (
Form: Main TMainForm (
Prop: Width 400
Prop: Height 500
Event: OnShow ( Message ( 'Show' Name: Sender ) )
Event: OnExit ( Message ( 'Exit' Name: Sender ) )
Control: Edit1 TEdit (
)
Control: Edit2 TEdit (
Prop: Left 100
Prop: Top 200
Event: OnEnter ( Message ( 'Enter' Name: Sender ) )
Control: Button1 TButton (
Event: OnClick ( Message ( 'Click' Name: Sender ) )
)
)
Control: Edit3 TEdit ()
)
)
)
Это на самом деле - цепочка лямбд. Все объекты - Immutable.
Надо обмозговать эту тему.
RunApplicationWithForms: (
Form: Main TMainForm (
Prop: Width 400
Prop: Height 500
Event: OnShow ( Message ( 'Show' Name: Sender ) )
Event: OnExit ( Message ( 'Exit' Name: Sender ) )
Control: Edit1 TEdit (
)
Control: Edit2 TEdit (
Prop: Left 100
Prop: Top 200
Event: OnEnter ( Message ( 'Enter' Name: Sender ) )
Control: Button1 TButton (
Event: OnClick ( Message ( 'Click' Name: Sender ) )
)
)
Control: Edit3 TEdit ()
)
)
)
Это на самом деле - цепочка лямбд. Все объекты - Immutable.
Надо обмозговать эту тему.
вторник, 26 сентября 2017 г.
Размышления. В каком порядке изучать языки программирования
Первый - C/C++ даже без вопросов. Потом Pascal. Потом ObjectPascal. Потом FORTH. Потом LISP. Потом Prolog. А потом только Python, Java, Ruby и все остальные.
Не про школьников естественно речь.
Для школьников надо начинать с Pascal (Object) и Python.
Мне так кажется.
Ассемблер надо конечно знать. Но "параллельно" всему остальному.
Ну и "в конце-концов" - функциональщина всё равно замаячит на горизонте.
Не про школьников естественно речь.
Для школьников надо начинать с Pascal (Object) и Python.
Мне так кажется.
Ассемблер надо конечно знать. Но "параллельно" всему остальному.
Ну и "в конце-концов" - функциональщина всё равно замаячит на горизонте.
среда, 20 сентября 2017 г.
Наблюдение
Лучше всего почему-то получаются рабочие задачи, которые записал на бумажке. Потом ещё раз записал. Потом опять записал. Потом выкинул бумажки в урну. Потом вспомнил и записал опять. Потом три раза вернулся. Подумал - "да не, бред". Потом опять записал. А потом тебе ставят "другую задачу" и "совсем не про то". А ты вспоминаешь про бумажки. И думаешь "вот оно"! И делаешь и задачу, которую поставили. И то, что так долго "мусолил". Вылежалось...
вторник, 5 сентября 2017 г.
Не перестаю удивляться
Не перестаю удивляться тому, что все операции сравнения могут быть выведены, через < (less), ! (not) и && (и):
bool operator> (A, B) {
return (B < A);
}
bool operator>= (A, B) {
return !(A < B);
}
bool operator<= (A, B) {
return !(B < A);
}
bool operator== (A, B) {
return ((A <= B) && (B >= A));
}
bool operator!= (A, B) {
return !(A == B);
}
https://ru.m.wikipedia.org/wiki/Степанов,_Александр_Александрович_(учёный)
bool operator> (A, B) {
return (B < A);
}
bool operator>= (A, B) {
return !(A < B);
}
bool operator<= (A, B) {
return !(B < A);
}
bool operator== (A, B) {
return ((A <= B) && (B >= A));
}
bool operator!= (A, B) {
return !(A == B);
}
https://ru.m.wikipedia.org/wiki/Степанов,_Александр_Александрович_(учёный)