реклама на сайте
подробности

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> Непонятный typedef
GetSmart
сообщение Oct 15 2009, 13:42
Сообщение #16


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Процедуры и функции и прочее - это алгоритмические еденицы. Они есть везде, где есть алгоритмы.

Видимо проблема растёт из "нового" образования в школах/вузах. Раньше, когда в обязательном порядке изучали Паскаль ни у кого бы не возникло отторжение понятия процедуры.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Oct 15 2009, 15:12
Сообщение #17


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(sigmaN @ Oct 15 2009, 15:55) *
Да все знают. И ответ топикстартеру был понятен.

Только про ответ- на нормальном языке это должно быть так:
h - указатель на функцию без возвращаемого значения с одним аргументом в виде (void *arg)
т.е.
Код
void somefunc(void *param);// объявили
.................................................................
sys_timeout_handler h;
int main(void)
{
h = &somefunc;
........BUBUBU.....
h(NULL);
}

пардон за занудство, но иногда это уместно.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Oct 15 2009, 15:22
Сообщение #18


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Дайте _Pashе медаль. И ещё одну, за занудство smile.gif


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Oct 15 2009, 16:03
Сообщение #19


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(andrew_b @ Oct 15 2009, 17:23) *
Речь идёт конкретно про Си. Реквестирую цитату из стандарта Си, где определяется "процедура".
Вы же умный человек. Зачем за слова цепляться. В Си процедура и функция - едино, как любовь и Родинаsmile.gif Русский язык богат на синонимы. А слышали вы когда-нибудь о термине "процедурный тип программирования"? Да стандарт написан на английском языке и что... Они, когда о грудном ребёнке говорят, используют It (оно) - нас же коробит. Нужна адаптация. Я вот недавно в книжном магазине был, предварительно прочитав книгу Роберта Хайнлайна "Чужак в чужой стране", так теперь на полках стоят и "Чужак в чужой земле" и "Чужак в стране чужой" - так я не могу их читать после оригинала. Тут есть о чём поспорить, пообсуждать, остальное - "пыль для моряка"...
Цитата(GetSmart @ Oct 15 2009, 19:22) *
Дайте _Pashе медаль. И ещё одну, за занудство smile.gif
Агаsmile.gif


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
dxp
сообщение Oct 16 2009, 03:52
Сообщение #20


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(GetSmart @ Oct 15 2009, 20:42) *
Процедуры и функции и прочее - это алгоритмические еденицы. Они есть везде, где есть алгоритмы.

Да? А вот в языке Verilog, например, есть function и task, процедуров не завезли. sad.gif Как быть?

Нет в языке С процедур. Есть только функции. Это вопрос о терминах. Если хотите, чтобы вас однозначно понимали в какой-то предметной области, будьте добры корректно употреблять легальные устоявшиеся термины. В языке программирования С нет процедур. И в языке программирования С++ нет процедур. В нем же функции-члены классов - это функции члены классов, а не методы, как их многие называют. Методы в С++ - это виртуальные функции. В другом языке, возможно, корректно называть любые функции-члены методами. Но не в С++. Когда я вижу в контексте С++ слово метод, у меня сразу включается восприятие полиморфного поведения данной функции. И очень неприятно потом узнавать, что это была обычная функция-член. Некорректное употребление терминологии - источник для путаницы. И замечание было сделано совершенно уместно.

Цитата(GetSmart @ Oct 15 2009, 20:42) *
Видимо проблема растёт из "нового" образования в школах/вузах. Раньше, когда в обязательном порядке изучали Паскаль ни у кого бы не возникло отторжение понятия процедуры.

Проблема растет из недостаточного знания матчасти и/или небрежного отношения мелочам. И это зря. "Профессионал отличается от любителя отработкой мелочей" (с).


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
ARV
сообщение Oct 16 2009, 04:33
Сообщение #21


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



имхо, профессионалу наплевать, как обозвать структурную единицу - процедурой, методом, функцией... он понимает суть. а пытающийся выглядеть профессионалом аппелирует к строгой терминологии, из-за отсутствия которой у него могут быть проблемы с пониманием сути.

кстати, наличие разной терминологии для описания одного и того же явления как раз порождается именно желанием выделиться из общей массы. ООП, если я не ошибаюсь, пошло не от С++, а от смолтока (smalltalk) - казалось бы: все последующие "производные" ООП-языков должны использовать "классическую" терминологию - ан нет, каждый норовит ввести нечто свое... ничего при этом не меняя по сути.

Зри в корень! © К.Прутков

P.S. Когда нечего сказать - спроси: "а где в стандарте это прописано?" - дискуссия гарантирована smile.gif


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
dxp
сообщение Oct 16 2009, 06:24
Сообщение #22


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(ARV @ Oct 16 2009, 11:33) *
имхо, профессионалу наплевать, как обозвать структурную единицу - процедурой, методом, функцией... он понимает суть.

Угу. Давайте транзисторы называть триодами (это даже короче), компиляторы языков С/C++ - трансляторами (а чем плохо?), процессоры - микросхемами (и таких встречал). Веселое будет общение. Попробуйте хотя бы с транзисторами. biggrin.gif

Терминологию для того и придумывают и вводят в обиход, чтобы свести к минимуму неоднозначности и облегчить понимание в общении. И пренебрежение терминологией - это как минимум неуважение к собеседникам.

Цитата(ARV @ Oct 16 2009, 11:33) *
а пытающийся выглядеть профессионалом аппелирует к строгой терминологии, из-за отсутствия которой у него могут быть проблемы с пониманием сути.

Не вдавался в вопрос, кто тут кем пытается выглядеть, но именно непонимание сути (а точнее, ее нюансов) и приводит к тому, что и с терминологией проблемы - не видит такой "профессионал" разницы и не понимает необходимости в следовании терминологии.

Цитата(ARV @ Oct 16 2009, 11:33) *
кстати, наличие разной терминологии для описания одного и того же явления как раз порождается именно желанием выделиться из общей массы. ООП, если я не ошибаюсь, пошло не от С++, а от смолтока (smalltalk) - казалось бы: все последующие "производные" ООП-языков должны использовать "классическую" терминологию - ан нет, каждый норовит ввести нечто свое... ничего при этом не меняя по сути.

Класс! Да будет вам известно, что в языке SmallTalk абсолютно все основано на ОПП, и там любая функция объекта является виртуальной, т.е. является методом. В то время как в языке C++, виртуальными являются только функции, специально объявленные с квалификатором virtual, и они - да, являются методами, но все остальные нестатические функции-члены классов являются просто обыкновенными функциями-членами и никакими методами не являются. И называть их методами - есть проявление безграмотности.

Можете сами сделать вывод о связи терминологии с профессионализмом. biggrin.gif


Цитата(ARV @ Oct 16 2009, 11:33) *
Зри в корень! © К.Прутков

Вот именно!

Цитата(ARV @ Oct 16 2009, 11:33) *
P.S. Когда нечего сказать - спроси: "а где в стандарте это прописано?" - дискуссия гарантирована smile.gif

Когда нечего сказать по сути, лучше помолчать. А стандарты придуманы не для любителей флуда, а для людей, которые хотят общаться на одном языке. Адекватное владение терминологией в любой области - основа профессионализма.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Oct 16 2009, 07:57
Сообщение #23


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(dxp @ Oct 16 2009, 09:52) *
В нем же функции-члены классов - это функции члены классов, а не методы, как их многие называют. Методы в С++ - это виртуальные функции.


Первый раз слышу о таком разделении. Где такое прописано?


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
dxp
сообщение Oct 16 2009, 08:43
Сообщение #24


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(AHTOXA @ Oct 16 2009, 14:57) *
Первый раз слышу о таком разделении. Где такое прописано?

Терминология идет, как уже было сказано, с ООП языков, но там проще в этом смысле - там все функции объектов являются методами. Что касается С++, то про упомянутое, в частности, есть фраза Б.Страуструпа (The C++ Programming Language, Third Edition by Bjarne Stroustrup. Copyright ©1997 by AT&T.
Published by Addison Wesley Longman, Inc. ISBN 0-201-88954-4., 12.2.6 Virtual Functions):

To allow a virtual function declaration to act as an interface to functions defined in derived
classes, the argument types specified for a function in a derived class cannot differ from the argu-
ment types declared in the base, and only very slight changes are allowed for the return type
(§15.6.2). A virtual member function is sometimes called a method.
A virtual function must be defined for the class in which it is first declared (unless it is declared
to be a pure virtual function; see §12.3).

Думается, Страуструп является авторитетным дяденькой в контексте С++, и он тут не оригинальничает - следует общепринятому подходу. Да, и по смыслу метод - это переопределенное (т.е. измененное в наследниках) действие объекта, и таким свойством обладает как раз (и только) виртуальная функция в С++. А в чистых ООП языках ничего кроме методов и нет.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Oct 16 2009, 09:12
Сообщение #25


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Ясно, спасибо. Замечу всё же, что "иногда называют методом" - это весьма нестрого, и не тянет на строгое терминологическое определениеsmile.gif

-----
Я тут ещё вот что подумал...

Цитата(dxp @ Oct 16 2009, 14:43) *
Да, и по смыслу метод - это переопределенное (т.е. измененное в наследниках) действие объекта


Это ведь чисто умозрительно. Если уж речь идёт о точной терминологии, то надо оперировать какими-то более весомыми определениями, чем "по смыслу". Я, например, не нашёл указаний, что метод должен быть обязательно переопределяем.
Вот например, из википедии:
Цитата
Метод в объектно-ориентированном программировании - это функция, принадлежащая какому-то классу или объекту.

Никаких намёков на переопределяемость.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
dxp
сообщение Oct 16 2009, 10:09
Сообщение #26


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(AHTOXA @ Oct 16 2009, 16:12) *
Ясно, спасибо. Замечу всё же, что "иногда называют методом" - это весьма нестрого, и не тянет на строгое терминологическое определениеsmile.gif

Он просто упомянул о том, что виртуальная функция - это то, что называют методом в ООП. Метод - это термин из ООП. Если пройтись по его книге, то слово method там встречается еще не раз, но всегда в ином смысле - как способ. Как обозначение простой функции-члена этот термин не применяется. Это устоявшаяся терминология, и разумно ее придерживаться.

Цитата(AHTOXA @ Oct 16 2009, 16:12) *
Я тут ещё вот что подумал...

Это ведь чисто умозрительно. Если уж речь идёт о точной терминологии, то надо оперировать какими-то более весомыми определениями, чем "по смыслу". Я, например, не нашёл указаний, что метод должен быть обязательно переопределяем.
Вот например, из википедии:

Никаких намёков на переопределяемость.

Ключевое словосочетание: "в объектно-ориентированном программировании". Т.е. задан контекст. В ООП все функции являются переопределяемыми (виртуальными), поэтому нет смысла это специально выделять. А С++ - язык гибридный, в нем сочетаются несколько парадигм программирования, в нем есть и обычные функции, и виртуальные, кои являются методами по ООП терминологии. А путаница возникает оттого, что некоторые люди, не задумываясь, переносят терминологию из ООП на другие парадигмы - в частности, в С++ - на объектную (классы, объекты классов).


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Oct 16 2009, 10:15
Сообщение #27


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(dxp @ Oct 16 2009, 09:52) *
Да? А вот в языке Verilog, например, есть function и task, процедуров не завезли. sad.gif Как быть?

Сэкономили smile.gif
Цитата(dxp @ Oct 16 2009, 09:52) *
Нет в языке С процедур. Есть только функции. Это вопрос о терминах. Если хотите, чтобы вас однозначно понимали в какой-то предметной области, будьте добры корректно употреблять легальные устоявшиеся термины. В языке программирования С нет процедур. И в языке программирования С++ нет процедур.
...
Проблема растет из недостаточного знания матчасти и/или небрежного отношения мелочам. И это зря. "Профессионал отличается от любителя отработкой мелочей" (с).

Поддерживаю тезис ARV, что профессионал видит в первую очередь суть.

Вы когда вызываете "процедуру" написанную к примеру на асме или ещё на чём в "ступор" не входите? А то ведь как можно вызвать из Си то, чего нет? smile.gif
Не стану критиковать создателей Си за кастрацию, но лично я, уж точно не чайник в программировании, намеренно дифференцирую процедуры и функции. И меня немного коробит (хотя иногда пользуюсь) когда применяют функцию (именно функцию), а результат никуда не используют. Во всяком случае эта ситуация обращает на себя внимание на подсознательном уровне. И я даже рад, что меня в вузе учили именно разделять алгоритмические еденицы на процедуры и функции. В этом есть смысл. Во всяком случае я знаю достаточно хорошо и Си и Паскаль и не впадаю в ступор, когда одна и та же алг. еденица называется в стандартах разных языков по-разному.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Oct 16 2009, 10:20
Сообщение #28


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(dxp @ Oct 16 2009, 16:09) *
Ключевое словосочетание: "в объектно-ориентированном программировании". Т.е. задан контекст.


Хорошо, почти убедилsmile.gif Осталось развеять мои сомнения только вот в этом:
Цитата(dxp @ Oct 16 2009, 16:09) *
В ООП все функции являются переопределяемыми (виртуальными)

Откуда это следует?

ЗЫ. Я не спорю, я действительно хочу разобраться. Потому что у меня слово "метод" совершенно не ассоциируется с виртуальностью.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Oct 16 2009, 10:24
Сообщение #29


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(dxp @ Oct 16 2009, 12:24) *
Угу. Давайте транзисторы называть триодами (это даже короче), компиляторы языков С/C++ - трансляторами (а чем плохо?), процессоры - микросхемами (и таких встречал).

Не передёргивайте. Я не назвал по-другому. Я дифференцировал термин. Я не процессор назвал микросхемой, а микросхему - процессором, в случае когда в стандарте есть только один термин "микросхема".


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
dxp
сообщение Oct 16 2009, 13:08
Сообщение #30


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(GetSmart @ Oct 16 2009, 17:15) *
Поддерживаю тезис ARV, что профессионал видит в первую очередь суть.

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

Цитата(GetSmart @ Oct 16 2009, 17:15) *
Вы когда вызываете "процедуру" написанную к примеру на асме или ещё на чём в "ступор" не входите?

А где на асме процедуры? Что там понимается под процедурой? Сначала определите термины четко, потом на их основе излагайте информацию. На асме такого рода терминов вообще мало. То, что вы подразумеваете под "процедурой" на асме называется, как правило, "подпрограммой" (subroutine). Это куда более уместный термин. И более устоявшийся. Надо полагать, по этой самой причине.

Цитата(GetSmart @ Oct 16 2009, 17:15) *
Не стану критиковать создателей Си за кастрацию, но лично я, уж точно не чайник в программировании, намеренно дифференцирую процедуры и функции. И меня немного коробит (хотя иногда пользуюсь) когда применяют функцию (именно функцию), а результат никуда не используют.

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

Цитата(GetSmart @ Oct 16 2009, 17:15) *
Во всяком случае эта ситуация обращает на себя внимание на подсознательном уровне. И я даже рад, что меня в вузе учили именно разделять алгоритмические еденицы на процедуры и функции. В этом есть смысл. Во всяком случае я знаю достаточно хорошо и Си и Паскаль и не впадаю в ступор, когда одна и та же алг. еденица называется в стандартах разных языков по-разному.

Речь не о ступоре, а о некорректном использовании терминов, что вносит просто путаницу и затрудняет восприятие/общение. Люди оперируют понятиями. Понятие - это однозначное отображение образа и его лексического выражения (т.е. словами). Когда человек слышит слово (словосочетание), то в его мозгу происходит процесс поиска соответствующего образа - если образ найден, то возникает понимание слова. Если образ не найден или обнаружена неоднозначность - т.е. найдено более одного образа и выбор не произведен, то понимания не возникает. Кстати, слово "сообразить", смысл которого вполне ясен, как раз и отражает этот процесс - когда образ уловил, так сразу и понимание возникло, что это слово и обозначает.

Пример. Слово "лук". Это что? Лук репчатый? Или лук для стрельбы? Поэтому всегда важен контекст, на основе которого и происходит выборка правильного образа - в кулинарной книге образ будет один, а в книжке про Робина Гуда - второй.

В нашем случае, если слово "процедура" употребляется в контексте языка Паскаль, то у меня оное слово вызывает образ вызываемого исполняемого кода, не возвращающего значения. В контексте языка С/C++ слово "процедура" вызывает совсем иной образ - например, "процедура обмена сигнатурами..." или "процедура подготовки данных...", т.е. это обозначение алгоритмической единицы, но не языка, а непосредственно алгоритма программы.

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

У вас процесс восприятия происходит точно так же, как у всех:

Цитата(GetSmart @ Oct 16 2009, 17:15) *
Во всяком случае эта ситуация обращает на себя внимание на подсознательном уровне.


Т.е. как раз и ищется соответствие слова и образа. Только вот контекст в некоторых случаях выбран неверно - при рассмотрении вопросов программирования на С, контекст восприятия у вас паскальный.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 22:04
Рейтинг@Mail.ru


Страница сгенерированна за 0.01527 секунд с 7
ELECTRONIX ©2004-2016