SlideShare una empresa de Scribd logo
1 de 51
Как спроектировать хороший  API  и почему это так важно Joshua Bloch перевод  coxx
Почему проектирование  API  так важно ? ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Почему проектирование  API  важно для Вас ? ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Характеристики хорошего  API ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Оглавление ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object]
Соберите требования – со здоровой долей скептицизма ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Начните с краткой спецификации. Одна страница – это идеально. ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Sample Early API Draft (1) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Sample Early API Draft (2) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Описывайте ваш  API  как можно раньше и чаще ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Описание  SPI  – еще важнее ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Плохо Хорошо
Сохраняйте реалистичные ожидания ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object]
API  должен делать   что-нибудь одно и делать это хорошо ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
API  должен быть минимальным, но не меньше ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Реализация не должна влиять на  API ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Минимизируйте доступность ВСЕГО ,[object Object],[object Object],[object Object],[object Object],[object Object]
Имена имеют значение –  API  это маленький язык ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Документация имеет значение ,[object Object],[object Object]
Документируйте скрупулёзно ( document religiously ) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Учитывайте, как принимаемые решения влияют на производительность ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Влияние решений по проектированию  API  на производительность реальна и постоянна ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
API  должен мирно сосуществовать с платформой ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object]
Минимизируйте изменяемость ( mutability) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Наследуйте классы только там где это имеет смысл ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Проектируйте и документируйте с учетом возможного наследования или запретите его ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object]
Не заставляйте клиента делать то, что может сделать модуль ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Не нарушайте принцип «наименьшего изумления» ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Падай быстро  –  сообщайте об ошибках   как можно скорее ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Предоставьте программный доступ ко всем данным, доступным в виде строк ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Используйте перегрузку методов с осторожностью ( Overload With Care ) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Используйте подходящие типы параметров и возвращаемых значений ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Используйте один и тот же порядок параметров во всех методах ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Избегайте длинных списков параметров ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Избегайте возвращать значения которые требуют особой обработки ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object]
Выбрасывайте исключения только чтобы сигнализировать об исключительной ситуации ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Отдавайте предпочтение  Unchecked Exceptions ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Включайте  Failure-Capture  информацию в исключения ,[object Object],[object Object],[object Object]
[object Object]
1.  Списковые   операции над  Vector -ом ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Sublist  операции после рефакторинга ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
2. Thread-Local  переменные ( Thread-Local Variables ) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Thread-Local Variables Refactored (1) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Thread-Local Variables Refactored (2) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Заключение ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Shameless Self-Promotion “ Bumper-Sticker API Design” - P. 506 in OOPSLA ‘06 Program
Как спроектировать хороший  API  и почему это так важно Joshua Bloch

Más contenido relacionado

La actualidad más candente

Tpo 05111(1)
Tpo 05111(1)Tpo 05111(1)
Tpo 05111(1)Nickola14
 
Вебинар: Гибкое управление требованиями
Вебинар: Гибкое управление требованиямиВебинар: Гибкое управление требованиями
Вебинар: Гибкое управление требованиямиTimofey (Tim) Yevgrashyn
 
закон иерархических компенсаций седова и C++ core guidelines
закон иерархических компенсаций седова и C++ core guidelinesзакон иерархических компенсаций седова и C++ core guidelines
закон иерархических компенсаций седова и C++ core guidelinesCOMAQA.BY
 
Kalouguine e talks-goodproposal-2010-10-09
Kalouguine e talks-goodproposal-2010-10-09Kalouguine e talks-goodproposal-2010-10-09
Kalouguine e talks-goodproposal-2010-10-09Alexander Kalouguine
 
Как стать TRUE-тестировщиком. Станислав Ким, Урансофт. Как стать TRUE-тестиро...
Как стать TRUE-тестировщиком. Станислав Ким, Урансофт. Как стать TRUE-тестиро...Как стать TRUE-тестировщиком. Станислав Ким, Урансофт. Как стать TRUE-тестиро...
Как стать TRUE-тестировщиком. Станислав Ким, Урансофт. Как стать TRUE-тестиро...uransoft
 
Интервью с Дмитрием Вьюковым – автором верификатора Relacy Race Detector (RRD)
Интервью с Дмитрием Вьюковым – автором верификатора Relacy Race Detector (RRD)Интервью с Дмитрием Вьюковым – автором верификатора Relacy Race Detector (RRD)
Интервью с Дмитрием Вьюковым – автором верификатора Relacy Race Detector (RRD)Tatyanazaxarova
 
Как разработать защищенное веб-приложение и не сойти при этом с ума? (PHDays 3)
Как разработать защищенное веб-приложение и не сойти при этом с ума? (PHDays 3)Как разработать защищенное веб-приложение и не сойти при этом с ума? (PHDays 3)
Как разработать защищенное веб-приложение и не сойти при этом с ума? (PHDays 3)Vladimir Kochetkov
 
Владимир Кочетков. Как разработать защищенное веб-приложение и не сойти при э...
Владимир Кочетков. Как разработать защищенное веб-приложение и не сойти при э...Владимир Кочетков. Как разработать защищенное веб-приложение и не сойти при э...
Владимир Кочетков. Как разработать защищенное веб-приложение и не сойти при э...Positive Hack Days
 
Специфика работы бизнес-аналитика в зависимости от типов проектов и методологий
Специфика работы бизнес-аналитика в зависимости от типов проектов и методологийСпецифика работы бизнес-аналитика в зависимости от типов проектов и методологий
Специфика работы бизнес-аналитика в зависимости от типов проектов и методологийSQALab
 
Промышленная разработка ПО. Лекция 4. Особенности работы программиста. Ча…
Промышленная разработка ПО. Лекция 4. Особенности работы программиста.  Ча…Промышленная разработка ПО. Лекция 4. Особенности работы программиста.  Ча…
Промышленная разработка ПО. Лекция 4. Особенности работы программиста. Ча…Mikhail Payson
 
Принципы объектно-ориентированного дизайна
Принципы объектно-ориентированного дизайнаПринципы объектно-ориентированного дизайна
Принципы объектно-ориентированного дизайнаСергей Шебанин
 
API design in java project
API design in java projectAPI design in java project
API design in java projectchashnikov
 
Как принести пользу разработке и упростить себе жизнь?
Как принести пользу разработке и упростить себе жизнь?Как принести пользу разработке и упростить себе жизнь?
Как принести пользу разработке и упростить себе жизнь?SQALab
 
Methods for building dialog agents and the technologies we used
Methods for building dialog agents and the technologies we used Methods for building dialog agents and the technologies we used
Methods for building dialog agents and the technologies we used Grid Dynamics
 

La actualidad más candente (17)

User stories and use cases - Клаудия Заика
User stories and use cases - Клаудия ЗаикаUser stories and use cases - Клаудия Заика
User stories and use cases - Клаудия Заика
 
Tpo 05111(1)
Tpo 05111(1)Tpo 05111(1)
Tpo 05111(1)
 
Вебинар: Гибкое управление требованиями
Вебинар: Гибкое управление требованиямиВебинар: Гибкое управление требованиями
Вебинар: Гибкое управление требованиями
 
закон иерархических компенсаций седова и C++ core guidelines
закон иерархических компенсаций седова и C++ core guidelinesзакон иерархических компенсаций седова и C++ core guidelines
закон иерархических компенсаций седова и C++ core guidelines
 
Kalouguine e talks-goodproposal-2010-10-09
Kalouguine e talks-goodproposal-2010-10-09Kalouguine e talks-goodproposal-2010-10-09
Kalouguine e talks-goodproposal-2010-10-09
 
Big Boss
Big BossBig Boss
Big Boss
 
Как стать TRUE-тестировщиком. Станислав Ким, Урансофт. Как стать TRUE-тестиро...
Как стать TRUE-тестировщиком. Станислав Ким, Урансофт. Как стать TRUE-тестиро...Как стать TRUE-тестировщиком. Станислав Ким, Урансофт. Как стать TRUE-тестиро...
Как стать TRUE-тестировщиком. Станислав Ким, Урансофт. Как стать TRUE-тестиро...
 
Интервью с Дмитрием Вьюковым – автором верификатора Relacy Race Detector (RRD)
Интервью с Дмитрием Вьюковым – автором верификатора Relacy Race Detector (RRD)Интервью с Дмитрием Вьюковым – автором верификатора Relacy Race Detector (RRD)
Интервью с Дмитрием Вьюковым – автором верификатора Relacy Race Detector (RRD)
 
Как разработать защищенное веб-приложение и не сойти при этом с ума? (PHDays 3)
Как разработать защищенное веб-приложение и не сойти при этом с ума? (PHDays 3)Как разработать защищенное веб-приложение и не сойти при этом с ума? (PHDays 3)
Как разработать защищенное веб-приложение и не сойти при этом с ума? (PHDays 3)
 
Владимир Кочетков. Как разработать защищенное веб-приложение и не сойти при э...
Владимир Кочетков. Как разработать защищенное веб-приложение и не сойти при э...Владимир Кочетков. Как разработать защищенное веб-приложение и не сойти при э...
Владимир Кочетков. Как разработать защищенное веб-приложение и не сойти при э...
 
Специфика работы бизнес-аналитика в зависимости от типов проектов и методологий
Специфика работы бизнес-аналитика в зависимости от типов проектов и методологийСпецифика работы бизнес-аналитика в зависимости от типов проектов и методологий
Специфика работы бизнес-аналитика в зависимости от типов проектов и методологий
 
Промышленная разработка ПО. Лекция 4. Особенности работы программиста. Ча…
Промышленная разработка ПО. Лекция 4. Особенности работы программиста.  Ча…Промышленная разработка ПО. Лекция 4. Особенности работы программиста.  Ча…
Промышленная разработка ПО. Лекция 4. Особенности работы программиста. Ча…
 
Принципы объектно-ориентированного дизайна
Принципы объектно-ориентированного дизайнаПринципы объектно-ориентированного дизайна
Принципы объектно-ориентированного дизайна
 
50 оттенков красного
50 оттенков красного50 оттенков красного
50 оттенков красного
 
API design in java project
API design in java projectAPI design in java project
API design in java project
 
Как принести пользу разработке и упростить себе жизнь?
Как принести пользу разработке и упростить себе жизнь?Как принести пользу разработке и упростить себе жизнь?
Как принести пользу разработке и упростить себе жизнь?
 
Methods for building dialog agents and the technologies we used
Methods for building dialog agents and the technologies we used Methods for building dialog agents and the technologies we used
Methods for building dialog agents and the technologies we used
 

Similar a Как спроектировать хороший API и почему это так важно

Req Labs'2011. Коммуникация нефункциональных требований
Req Labs'2011. Коммуникация нефункциональных требованийReq Labs'2011. Коммуникация нефункциональных требований
Req Labs'2011. Коммуникация нефункциональных требованийAlexander Kalouguine
 
Проектирование программных систем. Занятие 4
Проектирование программных систем. Занятие 4Проектирование программных систем. Занятие 4
Проектирование программных систем. Занятие 4Dima Dzuba
 
Проектирование программных систем. Занятие 1
Проектирование программных систем. Занятие 1Проектирование программных систем. Занятие 1
Проектирование программных систем. Занятие 1Dima Dzuba
 
Cергей Константинов, Яндекс
Cергей Константинов, ЯндексCергей Константинов, Яндекс
Cергей Константинов, ЯндексOntico
 
Проектирование программных систем. Занятие 8
Проектирование программных систем. Занятие 8Проектирование программных систем. Занятие 8
Проектирование программных систем. Занятие 8Dima Dzuba
 
Техники аналитика - CATWOE, H-METHOD, MOSCOW, SQUARE
Техники аналитика - CATWOE, H-METHOD, MOSCOW, SQUAREТехники аналитика - CATWOE, H-METHOD, MOSCOW, SQUARE
Техники аналитика - CATWOE, H-METHOD, MOSCOW, SQUARESQALab
 
SOLID – принципы объектно-ориентированного дизайна
SOLID – принципы объектно-ориентированного дизайнаSOLID – принципы объектно-ориентированного дизайна
SOLID – принципы объектно-ориентированного дизайнаPavel Treshnikov
 
Семинар ФКН: современные подходы к разработке ПО - часть 1
Семинар ФКН: современные подходы к разработке ПО - часть 1Семинар ФКН: современные подходы к разработке ПО - часть 1
Семинар ФКН: современные подходы к разработке ПО - часть 1Andrii Gakhov
 
Проектирование Программных Систем. Лекция 01
Проектирование Программных Систем. Лекция 01Проектирование Программных Систем. Лекция 01
Проектирование Программных Систем. Лекция 01Dima Dzuba
 
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПОЕвгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПОLuxoft Education Center
 
Архитектурные решения при создании облачного сервиса на Asp.Net
Архитектурные решения при создании облачного сервиса на Asp.NetАрхитектурные решения при создании облачного сервиса на Asp.Net
Архитектурные решения при создании облачного сервиса на Asp.NetGoSharp
 
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17OdessaFrontend
 
Inroducing SAP ABAP - Presentation with basics SAP ABAP
Inroducing SAP ABAP - Presentation with basics SAP ABAPInroducing SAP ABAP - Presentation with basics SAP ABAP
Inroducing SAP ABAP - Presentation with basics SAP ABAPmikhailshurgulaya
 
Виды QA: Всё что вы не знали и боялись спростить
Виды QA: Всё что вы не знали и боялись спроститьВиды QA: Всё что вы не знали и боялись спростить
Виды QA: Всё что вы не знали и боялись спроститьGoIT
 
Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке вы...
Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке вы...Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке вы...
Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке вы...CodeFest
 
О чем стоит подумать, приступая к разработке высоконагруженных систем
О чем стоит подумать, приступая к разработке высоконагруженных системО чем стоит подумать, приступая к разработке высоконагруженных систем
О чем стоит подумать, приступая к разработке высоконагруженных системArtem Volftrub
 

Similar a Как спроектировать хороший API и почему это так важно (20)

Req Labs'2011. Коммуникация нефункциональных требований
Req Labs'2011. Коммуникация нефункциональных требованийReq Labs'2011. Коммуникация нефункциональных требований
Req Labs'2011. Коммуникация нефункциональных требований
 
Проектирование программных систем. Занятие 4
Проектирование программных систем. Занятие 4Проектирование программных систем. Занятие 4
Проектирование программных систем. Занятие 4
 
Проектирование программных систем. Занятие 1
Проектирование программных систем. Занятие 1Проектирование программных систем. Занятие 1
Проектирование программных систем. Занятие 1
 
Cергей Константинов, Яндекс
Cергей Константинов, ЯндексCергей Константинов, Яндекс
Cергей Константинов, Яндекс
 
Проектирование программных систем. Занятие 8
Проектирование программных систем. Занятие 8Проектирование программных систем. Занятие 8
Проектирование программных систем. Занятие 8
 
Техники аналитика - CATWOE, H-METHOD, MOSCOW, SQUARE
Техники аналитика - CATWOE, H-METHOD, MOSCOW, SQUAREТехники аналитика - CATWOE, H-METHOD, MOSCOW, SQUARE
Техники аналитика - CATWOE, H-METHOD, MOSCOW, SQUARE
 
SOLID – принципы объектно-ориентированного дизайна
SOLID – принципы объектно-ориентированного дизайнаSOLID – принципы объектно-ориентированного дизайна
SOLID – принципы объектно-ориентированного дизайна
 
Семинар ФКН: современные подходы к разработке ПО - часть 1
Семинар ФКН: современные подходы к разработке ПО - часть 1Семинар ФКН: современные подходы к разработке ПО - часть 1
Семинар ФКН: современные подходы к разработке ПО - часть 1
 
Проектирование Программных Систем. Лекция 01
Проектирование Программных Систем. Лекция 01Проектирование Программных Систем. Лекция 01
Проектирование Программных Систем. Лекция 01
 
Design Rules And Principles
Design Rules And PrinciplesDesign Rules And Principles
Design Rules And Principles
 
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПОЕвгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
 
Архитектурные решения при создании облачного сервиса на Asp.Net
Архитектурные решения при создании облачного сервиса на Asp.NetАрхитектурные решения при создании облачного сервиса на Asp.Net
Архитектурные решения при создании облачного сервиса на Asp.Net
 
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
 
Inroducing SAP ABAP - Presentation with basics SAP ABAP
Inroducing SAP ABAP - Presentation with basics SAP ABAPInroducing SAP ABAP - Presentation with basics SAP ABAP
Inroducing SAP ABAP - Presentation with basics SAP ABAP
 
Виды QA: Всё что вы не знали и боялись спростить
Виды QA: Всё что вы не знали и боялись спроститьВиды QA: Всё что вы не знали и боялись спростить
Виды QA: Всё что вы не знали и боялись спростить
 
Unit Testing
Unit TestingUnit Testing
Unit Testing
 
Agile testing
Agile testingAgile testing
Agile testing
 
Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке вы...
Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке вы...Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке вы...
Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке вы...
 
О чем стоит подумать, приступая к разработке высоконагруженных систем
О чем стоит подумать, приступая к разработке высоконагруженных системО чем стоит подумать, приступая к разработке высоконагруженных систем
О чем стоит подумать, приступая к разработке высоконагруженных систем
 
Nfr and quality-models
Nfr and quality-modelsNfr and quality-models
Nfr and quality-models
 

Как спроектировать хороший API и почему это так важно

Notas del editor

  1. Third bullet: As if that’s not enough pressure.. Hopefully I’ve convinced you that API design is important. But why is it important to you personally?
  2. If you get it right, it looks obvious in retrospect. It’s a good sign if people say: “of course that’s how it should look; so what?” Appropriate to audience: a good API in C++ might be a bad API in Java; a good API for economists might be a bad API for physicists.
  3. So now you know the characteristics of a good API. In the remainder of the talk I’ll outline the general principles that lead to good APIs and specific attributes of Class, Method, and Exception APIs that lead to goodness. Finally I’ll conclude with a couple of quick examples API refactorings. First two sections are a bit fluffy but the last four are chock-full of code examples
  4. Mention “subtle color code”
  5. Худшее, что Вы можете сделать, это провести 6 месяцев над написанием 248-страничной спецификации прежде чем показать ее кому либо. К этому моменту Вы не сможете отказаться от API даже если принципиально ошибочно.
  6. A static utility class containing decorators for applying retry policies, and static factories for the retry policies themselves. This one-page description isn’t yet a true specification, but it’s good enough to evaluate and improve the API. So how do you evaluate it?
  7. You write code to it, early and often! Examples are among the most important code you’ll ever write to an API. They form the basis of thousands of actual programs so any good practices are magnified a thousand-fold, and and bugs pop up in a thousand places.
  8. It’s best if different people write the plug-ins. The you test SPI doc as well.
  9. I don’t mean that you shold take one API component from everyone and throw them together into a rude semblance of an API; that’s a recipe for disaster. Rather, you should come up with a unified, coherent design that represents a compromise among all the stakeholders in the API. You generally can’t fix API mistakes outright, but you improve things by making judicious, compatible additions
  10. That’s all I have to say about the process of API design, now onto the principles of what makes for a good API design.
  11. Often these names are metaphorical in nature, e.g. Publish-Subscribe service. (Some of these ‘bad’ names cross the line into ugly.)
  12. If you remember only one thing in the talk, this is it. Conceptual weight, sometimes called conceptual surface-area
  13. Не всегда легко понять, что входит в детали реализации. Хороший настраиваемый параметр : размер пула очередей ; плохой : Число элементов в хэш-таблице.
  14. This advice is somewhat controversial, and is less applicable in a research setting
  15. Parnas said it better than I ever could, so I’m simply going to read you what he said: I don’t know about you , but I find that inspiring. I’ve got religion. <next slide> and the only thing to do about it is to document religiously.
  16. There is no excuse for an undocumented API element – period
  17.  (Next slide contains Dimentsion ex.)
  18. Here’s an example from Java’s awt
  19. That’s the last general principal I’m going to talk about.
  20. Now let’s see how all of this applies to class design
  21. This idea is central to functional programming
  22. In plain English, ask yourself “is every Foo a Bar”? Unless you can say yes *with a straight face*, Foo must not extend Bar.
  23. That’s all I have to say about class design
  24. Now on to method design
  25. Here’s and example from the W3C DOM API
  26. Here’s a particularly egregious example of what not to do
  27. I believe that method overloading is overused
  28. Mention that Builder pattern is a special case of breaking up the method Nasty example from Win32 API
  29. The get method on ByteBuffer in Java’s nio package violates this advice ThreadGroup.enumerate returns void
  30. In a language that has checked and unchecked exceptions, …. A checked exception represents a strong statement by the API designer that a method can fail in some way, and the programmer should consider this and attempt to take corrective action. If you can’t take corrective action, then it shouldn’t be a checked exception.
  31. Two quick API refactorings
  32. This is an example where you win by solving a general problem
  33. Around 1996 many people wrote thread-local variable implementations in Java. Most of them looked like this:
  34. Code to assign a serial number to each thread and print a thread’s serial number Notice that outer class class is noninstantiable, and each of its static methods takes a single instance of the inner class. So why don’t we move the set and get methods onto the inner class? Once we do that there are no methods left on the outer class except the getKey static factory. So why don’t we do away with the outer class entirely? This is what we’re left with:
  35. This is essentially the ThreadLocal API that Java adopted in release 1.2 Notice that it’s trivial to generify this API. It was impossible to generify the first API, and difficult to generify the second.
  36. Not a glory profession - API designers like plumbers. Your APIs won’t be perfect, but with a bit of luck they’ll be good
  37. An homage to Jon Bentley’s “Bumper-sticker Computer Science” in “More Programming Pearls” iJava Best-Practices book with a hidden agenda of encouraging programmers to think about API design **** Timothy Boudreau Jaroslav Tulach: Designing APIs that Stand the Test of Time Thursday 10/26, 3:30 P.M.