Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > getters and setters


Автор: docmai 5.11.2010, 22:18
Простите, не нашел в гугле внятного описания соответствующий функций? Что это такое? И как этим пользоваться в Intellij IDEA?

Автор: _Y_ 5.11.2010, 23:04
В моем представлении это полусленговые слова определяющие методы классов, не содержащие какого-либо кода (почти), а просто дающие доступ к атрибутам. Например класс A с приватным атрибутом attr может быть снабжен публичными геттером и сеттером:
Код

class A{

   private int attr;

   public int get_attr(){
      return attr;
   }

   public void set_attr(int attrIn){
      attr = attrIn;
   }
}

Автор: nc30 6.11.2010, 07:05
docmai, начну немного издалека.

Инкапсуляция - один из фундаментальных принципов ООП, подразумевающий объединение данных (полей) и операций над ними (методов) в одном классе. 

Основной принцип инкапсуляции, упрощенно говоря, заключается в запрещении прямого доступа к полям экземпляра (объекта) данного класса из экземпляров других классов. Программы должны взаимодействовать с данными объекта только с помощью методов этого объекта.

ГЕтеры (getters) - сленговое название методов доступа (accessors) к полям объекта. Гетеры могут лишь просматривать поля экземпляра, не изменяя их.

СЕтеры (setters) - соответственно, модифицирующие (mutators) методы, которые могут изменять поля экземпляра.

Каждому полю может (не обязательно должна) быть назначена пара гетер/сетер. Имена этих методов обычно начинаются с префиксов get/set (is/set для boolean), далее следует имя поля, с которым взаимодействует метод.

Необходимо помнить о том, что в соответствии с http://www.oracle.com/technetwork/java/codeconv-138413.html: "Methods should be verbs, in mixed case with thefirst letter lowercase, with thefirst letter of each internal word capitalized." Т. е. имена любых методов в Java нужно оформлять с использованием т. н. "верблюжьего стиля" (camel case). 

Для формирования навыка правильного написания классов имеет смысл обратить внимание на модель JavaBeans (не путать с Enterprise JavaBeans).
Пример бина:
Код

public class PersonBean implements java.io.Serializable {
    private String name;
    private boolean deceased;
 
    // Конструктор по умолчанию (без аргументов).
    public PersonBean() {}
 
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    // Различные семантики для логического поля (is или get)
    public boolean isDeceased() {
        return deceased;
    }
     
    public void setDeceased(boolean deceased) {
        this.deceased = deceased;
    }
}

Автор: docmai 6.11.2010, 13:44
Большое спасибо за ответы!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)