Я смотрел в блоге о хорошем дизайне API текст ссылки
В одном из примеров разделов, озаглавленных «Изобретая сокет», он показал, как применять определенные правилаи обязательное условие для клиентского кода, который его использует.например.клиент должен вызвать bind (), прежде чем он сможет вызвать connect (), и он должен быть подключен, прежде чем ему разрешено отправлять () или получать () данные.
Я более знаком с C / C ++, поэтому яУ меня возникли проблемы с полным пониманием того, как дизайн класса обеспечивает соблюдение правил API.Как, например, как вы предотвращаете выполнение клиентским кодом вызовов в этот API с помощью чего-то вроде этого:
SocketConnected s = socket.bind(localaddress, 1000);
//client doesn't call the connect() method
//and just calls the send() method right away.
//this line should give compile-time error
//because only bind() was called but not connect()
s.send(/* some data goes here */);
Как и почему компилятор может отловить эту ошибку?Если я правильно понимаю наследование подкласса, то SocketConnected - это SocketBound, который - это Socket.Но если клиентский код может объявить объект SocketConnected, как вы можете применять правило, при котором bind () и connect () должны вызываться до того, как send () и receive () будут разрешены?
Спасибо