Добро пожаловать! Войти Зарегистрироваться

Расширенный

C# vs C++

Написал Alexey 
C# vs C++
07 August 2007 14:02
А почему в бакалавриате нас упорно хотят увести от всеми любимого C++ к C#? Это козни MS? Хотелось бы в первую очередь изучать именно С++ (еще лучше оба языка).
И кстати, не подготовлен ли еще перевод на специалитет?
zzz
Re: C# vs C++
07 August 2007 14:02
Alexey писал(а):

> А почему в бакалавриате нас упорно хотят увести от всеми
> любимого C++ к C#? Это козни MS? Хотелось бы в первую очередь
> изучать именно С++ (еще лучше оба языка).
Вообще-то должно быть надъязыковое обучение. Конкретные языки для иллюстрации теоретического курса и практических заданий выбирает преподаватель -- лектор курса по согласованию с кафедрой.

> И кстати, не подготовлен ли еще перевод на специалитет?

Нынешний набор на 1 курс уже принимается (по выбору) на бакалавриат или (большинство) на специалитет. Теперь надо доработать и утвердить переходные планы для остальных.
Ситуация может осложниться принудительным введением двухступенчатой системы для этой специальности во всех вузах. Тогда появится магистратура года не полтора.
Re: C# vs C++
07 August 2007 15:03
В прошлом году действительно была идея читать только C#, но, как показала практика, идея оказалась не очень удачной.
Поэтому начиная с этого года я буду читать и С++ и C#, как было до этого. Это позволят лучше прочувствовать разницу процедурного и ООП стиля и принципы работы указателей и ссылок.
Re: C# vs C++
07 August 2007 15:03
На мой взгляд такие языки как C# и Java позволяют реализовывать бизнес-задачи с использованием меньшего числа программных конструкций, и при этом код на данных языках очень хорошо читается и сохраняет всю красоту ООП. В связи с этим такие языки обладают преимуществом перед более мощными но в то же время и более "массивными" языками (такими как C++) при изучении дисциплин касающихся над-языковых технологий (таких как, например, курс Сети ЭВМ).
Re: C# vs C++
07 August 2007 16:04
Хороший С++ требует как минимум не больше программных конструкций, чем Java. А в связи с отсутствием перегрузки операторов, в широком круге задачь код на Java выглядит куда более громоздко и нечитабельно.

Другое дело, что «хороший» С++ мало кто знает. Вот, к примеру, Серге Владимирович (Nightblade) почему-то упомянул процедурный подход при сравнении С++ и С#. Каким образом сравнение этих языков поможет почувствовать разницу между ОО- и процедурным подходами?

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

То же касается и C#, даже еще в большей степени.

На вопрос почему мы вдруг начали изучать «надязыковые технологии» на примере C# ответ простой. Потому что у нас завялась дружба с команиями, заинтересованными во внедрении своих замечательных и не очень -- совершенно не важно каких -- технологий везде и всюду. А комерческий интерес (их) оказывается самым главым (почему-то для нас) фактором в выборе языка, на примере которого мы эти надязыковые технологии преподаем.



Лебедев Алексей
Re: C# vs C++
09 August 2007 21:09
По поводу разницы между ОО- и процедурным подходом - очень просто. Нужно одну и ту же задачу (реализацию списка, например) решить без ООП на Unmanaged С++ (заодно разобраться с указателями и с синтаксисом) и с использованием ООП на C++ и C#. Эти два варианта - две лабораторные работы. На C# можно, конечно, сделать класс со статическими методами, но это не так показательно, как обычные функции и структуры.

Что касается перегрузки операторов, то за наглядность приходится платить. Если я вижу оператор, то я ожидаю от него определенного поведения. А когда их можно перегружать, никогда не знаешь, как его другой программист реализовал. smiling smiley Имхо, лучше громоздкий, но понятный код.

Console.WriteLine("Hello!");
понятнее чем
cout << "Hello!";

Снизойти до С++ на C# можно очень легко, используя unsafe код или же написав отдельную dll на чистом C, если так хочется и подключив ее средствами interop. В реальной жизни мне приходилось с этим сталкиваться только однажды - при работе с USB-ключами для защиты приложения от копирования.
Re: C# vs C++
10 August 2007 00:12
Учить надо на том, что логично, кратко и понятно. С моей точки зрения, это C++. Например потому, что я не представляю себе как объяснить (или хотя бы реализовать) указатели при помощи языка, где их нет. Теоретически это можно, практически будет отвратительный нечитабельный код, неприятный даже автору. Ст. преп. Лебедев совершенно справедливо заметил, что на C++ всегда можно написать не менее изящный код, чем на Java.

Если речь идет об указателях, то она наверняка пойдет и про распределение памяти. Реализовать свой распределитель памяти в Java-подобных языках невозможно, ибо сборщик мусора мешает. А если и возможно, то выглядеть это будет наверняка отлично от встроенного способа. А в C++ достаточно переопределить operator new[]().

То же касается Python, где можно отключить сборщик мусора.

Re: C# vs C++
10 August 2007 00:12
Nightblade писал:

> По поводу разницы между ОО- и процедурным подходом - очень
> просто. Нужно одну и ту же задачу (реализацию списка, например)
> решить без ООП на Unmanaged С++ (заодно разобраться с
> указателями и с синтаксисом) и с использованием ООП на C++ и
> C#.

Пардон, не понял, в чем принципиальная разница между указателями и ссылками в C#?

> Что касается перегрузки операторов, то за наглядность
> приходится платить. Если я вижу оператор, то я ожидаю от него
> определенного поведения. А когда их можно перегружать, никогда
> не знаешь, как его другой программист реализовал.

Ну да, ну да, сейчас пойдут сказки про то, как в operator= все, кому не лень, суют форматирование диска.

> Имхо,
> лучше громоздкий, но понятный код.
>
> Console.WriteLine("Hello!");
> понятнее чем
> cout << "Hello!";

Может таки не вырывать из контекста? А привести оба варианта:

#include <iostream>

int main()
{
std::cout << "Hello, World!" << std::endl;
}


using System.Console;

class demo
{
static int main()
{
Console.WriteLine("Hello, World!");
}
}

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

Вы и вправду считаете, что

assign(f, div(mul(mul(G, m1), m2), mul(r, r)));

понятнее

f = G * m1 * m2 / r * r; ?
К сожалению, только зарегистрированные пользователи могут писать в этом форуме.

Авторизоваться на форуме