27 февраля 2008

Требование мультипарадигменности

Просматривая стандарт C# (ECMA-334) обнаружил, что в этом языке отсутствуют extern функции, в наличии только методы. Это логично, т.к. C# позиционируется как объектно-ориентированный язык. Пример из стандарта:

[Example: The following example demonstrates the use of the extern modifier in combination with a Dl l Import attribute that specifies the name of the external library in which the method is implemented:


using System.Text;
using System.Security.Permissions;
using System.Runtime.InteropServices;
class Path
{
[DllImport("kernel32" , SetLastError=true)]
static extern bool CreateDirectory(string name, SecurityAttribute sa);
[DllImport("kernel32" , SetLastError=true)]
static extern bool RemoveDirectory(string name);
[DllImport("kernel32" , SetLastError=true)]
static extern int GetCurrentDirectory(int bufSize, StringBuilder buf);
[DllImport("kernel32" , SetLastError=true)]
static extern bool SetCurrentDirectory(string name);

end example]


Таким образом, все экспортированные из dll функции, становятся членами класса. С одной стороны это хорошо, поскольку стимулирует написание объектных оберток для внешних функций, но с другой, если есть необходимость в импорте большого количества разнородных по функциональности методов, приводит к необоснованному разрастанию иерархии классов. Собрать все методы в один класс — также не самый лучший вариант, поскольку это уничтожает саму идею объектно-ориентированного анализа. Так сказать, форма издевается над содержанием.
Куда лучше обстоят дела в языке D, который поддерживает кроме объектной, еще и модульную, и процедурную декомпозицию. Современный язык программирования должен быть мультипарадигменным!

Комментариев нет: