|
|
|
Отличие абстрактных типов данных (АТД) от классов в ООП
|
|||
|---|---|---|---|
|
#18+
В чем собственно разница АТД от классов? В АТД мы все определяем через операции, но ведь в классах тоже так делается. По крайней мере, в классах можно так сделать, когда детские классы определяют новые операции на родительских классах. Может разница в том, что АТД это всегда значения (передаются по значению), а экземпляры классов это объекты (передаются по ссылке)? Но вроде ООП не определяет явно, являются будут ли экземпляры классов значениями или объектами. Да и не ясно, являются ли элементы данных в АТД всегда значениями или они могут быть объектами (передаваться по ссылке)? Если кто-то слышал что-то про АТД, то может прояснит эти вопросы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2011, 11:43 |
|
||
|
Отличие абстрактных типов данных (АТД) от классов в ООП
|
|||
|---|---|---|---|
|
#18+
svnv, svnv, в первую очередь расширяемостью. если в ООП легко добавлять новый типы, но трудно добавлять новый функции, то в АТД наоборот - новую ф-ю добавить легко, а расширить тип гораздо труднее. демонстрирую. есть библиотечный классы: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. добавить в иерархию нового наследника легко: Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2011, 15:21 |
|
||
|
Отличие абстрактных типов данных (АТД) от классов в ООП
|
|||
|---|---|---|---|
|
#18+
svnv, а с АТД все наоборот. Есть Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. теперь добавить новую ф-ю леко: Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2011, 15:24 |
|
||
|
Отличие абстрактных типов данных (АТД) от классов в ООП
|
|||
|---|---|---|---|
|
#18+
еще одно из важных отличий - инкапсуляция. В ООП, принято скрывать данные от пользователя, и давать к ним доступ только через интерфейс, в то время как АТД данные не скрывают. далее если говорить про изменяемое состояние. в ООП, объект может менять состояния, в то время как объект построенный посредством АТД - неизменяемый. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2011, 15:28 |
|
||
|
Отличие абстрактных типов данных (АТД) от классов в ООП
|
|||
|---|---|---|---|
|
#18+
svnv Да и не ясно, являются ли элементы данных в АТД всегда значениями или они могут быть объектами (передаваться по ссылке)? могут передаваться по ссылке в некоторых языках. Например в языке F#: [SRC[ type A = B | C let x = B //по значению let rx = ref B//по ссылке /SRC] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2011, 15:32 |
|
||
|
Отличие абстрактных типов данных (АТД) от классов в ООП
|
|||
|---|---|---|---|
|
#18+
и забыл про диспетчеризацию по нескольким типам. type A = B | C type D = E | G f x y = match (x,y) with (B, E) -> ... (B, G) -> ... (C, E) -> (C, G) -> из ОО языков я такое видел только в лиспе с его мультиметодами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2011, 15:49 |
|
||
|
Отличие абстрактных типов данных (АТД) от классов в ООП
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaNв то время как АТД данные не скрывают.Немного спорно. http://ru.wikipedia.org/wiki/%C0%E1%F1%F2%F0%E0%EA%F2%ED%FB%E9_%F2%E8%EF_%E4%E0%ED%ED%FB%F5 авторВся внутренняя структура такого типа спрятана от разработчика программного обеспечения — в этом и заключается суть абстракции. Вообще, по сути - когда мы применяем готовые объекты - то работаем с ними как с АТД, вызывая только public методы. А если пишем свой класс (возможно, отнаследованный) - то уже ООП. ZyK_BotaNв ООП легко добавлять новый типы, но трудно добавлять новый функции Это где как. ) Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2011, 16:31 |
|
||
|
Отличие абстрактных типов данных (АТД) от классов в ООП
|
|||
|---|---|---|---|
|
#18+
Яростный МечZyK_BotaNв то время как АТД данные не скрывают.Немного спорно. http://ru.wikipedia.org/wiki/%C0%E1%F1%F2%F0%E0%EA%F2%ED%FB%E9_%F2%E8%EF_%E4%E0%ED%ED%FB%F5 [/src] блин, не заметил что в заголовке про Абстрактные типы данных. я писла про Алгебраические типы данных: http://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D0%B7%D0%BC%D0%B5%D1%87%D0%B5%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5 пуская автор ответит что он имел ввиду под АТД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2011, 16:35 |
|
||
|
Отличие абстрактных типов данных (АТД) от классов в ООП
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaNsvnv, в первую очередь расширяемостью. если в ООП легко добавлять новый типы, но трудно добавлять новый функции, то в АТД наоборот - новую ф-ю добавить легко, а расширить тип гораздо труднее. добавить в иерархию нового наследника легко: Код: plaintext 1. 2. 3. Зачем переписывать? Берем просто и добавляем новую функцию: Код: plaintext 1. 2. ZyK_BotaN Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. А что означает эта запись? Я так понял, что сперва мы определяем два новых типа B и С на основе A. А далее я так понимаю мы определяем две новых функции, которые для B и C выдают соответствующие значения. Ну и не ясно, зачем переписывать все предыдущие функции, если хочется расширить эти типы? Вообще, я не очень понимаю разницу между АТД и классами в ООП, поскольку отличия похоже только синтаксические, и заметить их можно только в удобстве использования для тех или иных задач. Ведь и там и там мы определяем какие-то данные и далее какие-то действия над ними. Например, стек можно реализовать почти одинаково хорошо через АТД и ООП. Более того, обе реализации выставляются как достижения этих подоходов, тогда как отличия только синтаксические. Если предположить, что АТД растет из ФП, тогда элементы это по идее значения (в смысле неизменяемы и т.п.), тогда как в ООП элементы обычно объекты (в смысле передаются по ссылке, изменяемы и т.п.) Я готов это принять, поскольку это действительно важно. Но ведь в обоих случаях есть исключения и поэтому не ясно, в чем тогда фундаментальная разница. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2011, 17:35 |
|
||
|
Отличие абстрактных типов данных (АТД) от классов в ООП
|
|||
|---|---|---|---|
|
#18+
svnvЗачем переписывать? Берем просто и добавляем новую функцию: Код: plaintext 1. 2. эээ не. я про добавление полиморфной ф-и котороя может работать со всеми наследниками класса A. svnvZyK_BotaN Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. А что означает эта запись? Я так понял, что сперва мы определяем два новых типа B и С на основе A. А далее я так понимаю мы определяем две новых функции, которые для B и C выдают соответствующие значения. нет, мы объявляем один Алгебраический Тип Даных, который предлагает три альтернативных конструктора. ф-и определенные для этого типа, должны корректно работать для всех конструкторов. svnvНу и не ясно, зачем переписывать все предыдущие функции, если хочется расширить эти типы? отлично, давай расширим тип: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. что будет результатом выражения: Код: plaintext 1. svnvВообще, я не очень понимаю разницу между АТД и классами в ООП, поскольку отличия похоже только синтаксические, и заметить их можно только в удобстве использования для тех или иных задач. я тебе указал на явные отличия, а ты поленился их осознать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2011, 17:49 |
|
||
|
Отличие абстрактных типов данных (АТД) от классов в ООП
|
|||
|---|---|---|---|
|
#18+
svnv, и уточни, где ты вычитал про АТД. может мы про разные вещи говорим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2011, 17:50 |
|
||
|
Отличие абстрактных типов данных (АТД) от классов в ООП
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaN нет, мы объявляем один Алгебраический Тип Даных A, который предлагает два альтернативных конструктора(B и C) . ф-и определенные для этого типа, должны корректно работать для всех конструкторов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2011, 17:52 |
|
||
|
Отличие абстрактных типов данных (АТД) от классов в ООП
|
|||
|---|---|---|---|
|
#18+
По сабжу Класс - вид атд ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2011, 18:00 |
|
||
|
Отличие абстрактных типов данных (АТД) от классов в ООП
|
|||
|---|---|---|---|
|
#18+
SQL_LamerПо сабжу Класс - вид атд если автор не ошибся и пот АТД имел ввиду Абстрактный Тип Данных, то да. но я подозреваю что речь о Алгебраических Типах Данных. Я часто замечал что их путают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2011, 18:05 |
|
||
|
Отличие абстрактных типов данных (АТД) от классов в ООП
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaNSQL_LamerПо сабжу Класс - вид атд если автор не ошибся и пот АТД имел ввиду Абстрактный Тип Данных, то да. но я подозреваю что речь о Алгебраических Типах Данных. Я часто замечал что их путают. действительно, тогда х.з., что автору надо :) ты пхп выучил ? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2011, 18:07 |
|
||
|
Отличие абстрактных типов данных (АТД) от классов в ООП
|
|||
|---|---|---|---|
|
#18+
SQL_Lamerдействительно, тогда х.з., что автору надо :) ты пхп выучил ? :) боюсь что не понравится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2011, 18:08 |
|
||
|
Отличие абстрактных типов данных (АТД) от классов в ООП
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaNSQL_Lamerдействительно, тогда х.з., что автору надо :) ты пхп выучил ? :) боюсь что не понравится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2011, 18:18 |
|
||
|
Отличие абстрактных типов данных (АТД) от классов в ООП
|
|||
|---|---|---|---|
|
#18+
SQL_LamerПо сабжу Класс - вид атд Т.е. АТД это больше теория или видение, которая предполагает разные реализации, а классы (в ООП) это одно из воплощений? Ну тогда в чем специфика классов, если сравнивать с теорией АТД, и какие есть другие виды АТД кроме классов? Я почему-то думал, что АТД это что-то тесно связанное с ФП, а значит это все о функциях и значениях, а потому не есть ООП, а отсюда следует, что на Яве мы с АТД работать не можем. Где здесь ошибка? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2011, 18:28 |
|
||
|
Отличие абстрактных типов данных (АТД) от классов в ООП
|
|||
|---|---|---|---|
|
#18+
[quot svnv]SQL_LamerЯ почему-то думал, что АТД это что-то тесно связанное с ФП Я уже 2 раза упоминал в этом топике: Алгебраические Типы Данных - связано с ФП. Абстрактные Типы Данных - теория. ты где встретил эту аббревиатуру ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2011, 18:33 |
|
||
|
Отличие абстрактных типов данных (АТД) от классов в ООП
|
|||
|---|---|---|---|
|
#18+
svnv, Буковы лень писать. Мне когда - то понравилась книжка "Сруктуры данных в С++" Уильям Топп и Уильям Форд. Интерестная. Хочешь - нагугли, прочитай. Конечно, это не единственный источник. Просто, первое, подходящее, что в голову пришло. Или может тебе здесь кто-нибудь в форуме разжует подробно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2011, 18:37 |
|
||
|
Отличие абстрактных типов данных (АТД) от классов в ООП
|
|||
|---|---|---|---|
|
#18+
[quot ZyK_BotaN]svnvпропущено... Я уже 2 раза упоминал в этом топике: Алгебраические Типы Данных - связано с ФП. Абстрактные Типы Данных - теория. ты где встретил эту аббревиатуру ? ага, че-то он не уточнил мне чето кажется, что всетаки абстрактные типы данных подразумеваюся телепатически :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2011, 18:39 |
|
||
|
Отличие абстрактных типов данных (АТД) от классов в ООП
|
|||
|---|---|---|---|
|
#18+
svnvТ.е. АТД это больше теория или видение, которая предполагает разные реализации, а классы (в ООП) это одно из воплощений? Ну тогда в чем специфика классов, если сравнивать с теорией АТД, и какие есть другие виды АТД кроме классов? ну вот пример по ссылке из Википедии: Список. С т.з. АТД в нем есть операции "добавить", "удалить" и прочее. Т.е. создали список Код: plaintext Далее рассмотриваем переменную list как АТД. (напр. list.Add(...); ) Если же у нас нет готового списка, то перед этим заморачиваемся на тему его реализации, т.е. пишем (используя ООП) Код: plaintext 1. 2. 3. Отладив этот класс, далее забываем детали реализации и опять юзаем его экземпляры в стиле АТД. Другие виды АДТ кроме классов - ну, например, хандл окна в Win32. В программе имеем некий HWND, и применяем к нему функции, понимая, что за этим хандлом прячется реализация, но мы о ней вообще не в курсе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2011, 18:41 |
|
||
|
Отличие абстрактных типов данных (АТД) от классов в ООП
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaNя тебе указал на явные отличия, а ты поленился их осознать. Ты просто использовал незнакомый язык, в котором я и пытаюсь разобраться. Код: plaintext 1. 2. 3. Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2011, 18:43 |
|
||
|
Отличие абстрактных типов данных (АТД) от классов в ООП
|
|||
|---|---|---|---|
|
#18+
SQL_Lamerага, че-то он не уточнил мне чето кажется, что всетаки абстрактные типы данных подразумеваюся телепатически :) а как же это : svnvЯ почему-то думал, что АТД это что-то тесно связанное с ФП мог неправильно расшифровать аббревиатуру. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2011, 18:45 |
|
||
|
Отличие абстрактных типов данных (АТД) от классов в ООП
|
|||
|---|---|---|---|
|
#18+
svnvZyK_BotaNя тебе указал на явные отличия, а ты поленился их осознать. Ты просто использовал незнакомый язык, в котором я и пытаюсь разобраться. Код: plaintext 1. 2. 3. нет, мы описываем новый тип А, с конструкторами B, C и D. в ООП языках для этого можно использовать абстрактный Класс A и калссы наследники B, C и D. svnv Код: plaintext 1. 2. 3. это ф-я с одним аргументом arg типа А. с помощью оператора match определяем конкретный конструктор, и в зависимости от него возвращаем соответствующее значение. Если констурктор B - то вернем 1, если С - то 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2011, 18:51 |
|
||
|
|

start [/forum/topic.php?fid=16&startmsg=37239734&tid=1342972]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
153ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 243ms |
| total: | 500ms |

| 0 / 0 |
