juan_gandhi: (Default)
Juan-Carlos Gandhi ([personal profile] juan_gandhi) wrote2005-02-24 06:39 pm

concrete class in an interface

package com.weird.java;

public interface Untitled1 {
  class XX {
    private String _name;
    public XX(String name) {
      _name = name;
    }
    public String getName() {
      return _name;
    }
  }
}

[identity profile] ivan-gandhi.livejournal.com 2005-02-28 04:30 am (UTC)(link)
Видишь ли. В принципе, конечно, да - определяй в интерфейсе лицо, а имплементацию оставь имплементации.

Но имплементация имплементации рознь. Определение equals() относится не к имплементации, а к определению типа. Точно также для списков операция равенства определяется как равенство головы и хвоста. Во всём этом достаточно полиморфизма; просто один только интерфейс задаёт сигнатуры операций, но не задаёт аксиомы. Условия, то есть. Как задавать условия? В принципе, интерфейсы для этого достаточно гибки: в них можно задавать константы. Вот в константах-то я и пытаюсь держать аксиомы. Неправильно - но где такой язык, в котором я мог бы писать правильно? Сишарп? Камл? Хаскел? Я не знаю; скажите мне.

[identity profile] 109.livejournal.com 2005-02-28 04:42 am (UTC)(link)
ну да, но не аксиомы только, а инварианты. "все Set-ы должны удовлетворять..." формализуй, чему должны удовлетворять все сеты - и (может быть) станет ясно, как это положить на язык.