Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Определение, дефиниция (лат. definitio — предел, граница) — логическая процедура придания строго фиксированного смысла терминам языка
В геометрии, топологии и близких разделах математики то́чкой называют абстрактный объект в пространстве, не имеющий ни объёма, ни площади, ни длины, ни каких-либо других измеримых характеристик. Таким образом, точкой называют нульмерный объект. Точка является одним из фундаментальных понятий в математике; любая геометрическая фигура считается состоящей из точек.
При систематическом изложении геометрии прямая линия обычно принимается за одно из исходных понятий, которое лишь косвенным образом определяется аксиомами геометрии.
получаете множество аксиом, каждая из которых «определяется» через какой-то набор соседок
Аксио́ма (др.-греч. ἀξίωμα — утверждение, положение), постула́т — утверждение, принимаемое истинным без доказательств, и которое в последующем служит «фундаментом» для построения доказательств в рамках какой-либо теории, дисциплины и т. д.
И в ООП нет ничего, что позволяет решать ту или иную задачу элегантнее (не путать с системами типов).
mov eax, источник
mov ebx, назначение
mov ecx, 10
loop:
dec ecx
mov byte [ebx], [eax]
inc eax
inc ebx
cmp ecx, 0
jnz loop
push esi
push ebx
push ecx
mov esi, источник
mov ebx, назначение
mov ecx, 10
jmp short start_loop
loop:
mov al,[esi]
inc esi
mov [ebx],al
inc ebx
dec ecx
start_loop:
cmp ecx, 0
jnz loop
pop ecx
pop ebx
pop esi
var Shape = new Class({
getAttribute:function(name){ return this.props[name] },
setAttribute:function(name,val){ this.props[name] = val }
});
var Rect = new Class(Shape, {
attrHooks:{} // ...
});
class Eq a where
(==) :: a -> a -> Bool
-- обратите внимание на то, что с обоих сторон от == значения одного типа
-- т.е. написать 1 == "asd" нельзя, а вот 1 == 2 и "sdd123" == "34sdf" - можно
data Eq a = Eq { (==) :: a -> a -> Bool }
var r = rect_create();
shape_get_attribute(r, 'attrname');
class Eq a where
(==) :: a -> a -> Bool
Вот зачем вы это пишите? Это не подход.Чтобы стать признанным троллем
<?xml version="1.0"?><?xml version="1.0"?> <habrauser>
<login>ShadowHacker</login>
<karma>-65</karma>
<rating>-31.36</rating>
<ratingPosition>-7</ratingPosition> </habrauser>
Толпа бывает ошибается
А что у нас с ООП АПИ? Посмотрите на Java. Совсем молодой язык. Но какой бардак в его стандартной библиотеке! Сотни классов для одной простейшей задачи. Один повторяет функционал другого.
Куча устаревших классов. Чтобы прочесть файл нужно еще 10 раз подумать как это сделать.
В сравнении с библитекой Си (пяток функций, написанных 40 лет назад.) это просто ад и позор.
Нет ООП, нет мерзкого наследования.
GDateTime* time = g_datetime_new();
g_datetime_add_years(time, 1);
g_datetime_add_months(time, 2);
g_datetime_add_weeks(time, 3);
g_datetime_add_days(time, 4);
DateTime time = new DateTime();
time.addYears(1);
time.addMonths(2);
time.addWeeks(3);
time.addDays(4);
struct GDateTimeExt {
struct GDateTime dateTime;
gboolean extended;
}
gboolean g_date_time_ext_get_extended(GDateTimeExt* datetime) {
return datetime.extended;
}
void g_date_time_ext_set_extended(GDateTimeExt* datetime, gboolean extended) {
datetime.extended = extended;
}
int main(int argc, char** argv) {
GDateTimeExt* datetime = g_date_time_ext_new();
g_date_time_add_month((GDateTime*)datetime, 1);
g_date_time_ext_set_extended(datetime, TRUE);
return 0;
}
void g_date_time_ext_add_month(GDateTimeExt* datetime, int month) {
g_date_time_add_month((GDateTime*)datetime, month + 1);
}
// shape.h :
typedef struct _shape {
void* data;
// "methods"
void (*print)(struct _shape*);
...
} shape_t;
shape_t* new_shape();
// shape.c :
static void print_shape(shape_t* shape) {
// print shape data
};
shape_t* new_shape() {
shape_t* shape = malloc(sizeof(shape_t));
shape->data = // ... create data here ....
shape->print = &print_shape;
return shape;
}
// in the client code
shape_t* shape = new_shape();
shape->print(shape); // кривовато, да :-/
void print_circle() {
// print circle data
}
shape_t* new_circle() {
shape_t* circle = malloc(sizeof(shape_t*));
circle->data = // .... create data here ....
circle->print = &print_circle;
return circle;
}
shape_t* circle = new_circle();
circle->print(circle);
typedef _CastedObject struct{
void *casted_data; // ссылка на данные базового класса (внутрь структуры data)
void *casted_functions; // ссылка на реализацию текущего интерфейса (внутрь virt_functions)
void *data; // данные всего объекта
void *virt_functions; // сводная таблица виртуальных функций
} CastedObject;
typedef struct _shape_methods {
void (*print)(struct _shape_t* shape);
} shape_methods_t;
typedef struct _shape_t {
shape_methods_t* methods;
int x;
int y;
} shape_t;
shape_t* shape = new_shape( 5, 5 );
shape_t* circle = new_circle( 10, 10, 20 );
print_shape(shape);
print_shape(circle);
Shape { x: 5, y: 5 }
Circle { x: 10, y: 10, r: 20 }
… поскольку человеческий мозг вообще не приспособлен для оперирования абстракциями
Почему ООП не отстой