JavaBeans

**JavaBeans**՝  դասեր Java լեզվով, որոնք գրված են որոշակի կանոնների համաձայն։ Դրանք օգտագործվում են մի քանի առարկաներ մեկում միավորելու համար (անգլ.՝ bean  - հատիկներ, սուրճի հատիկներ) օբյեկտների հարմար փոխանցման համար։

Sun Microsystems-ի հստակեցումը սահմանում է JavaBeans-ը որպես բազմակի օգտագործման ծրագրային բաղադրիչներ, որոնք կարող են շահագործվել գրաֆիկական դիզայներների և IDE գործիքների միջոցով։

JavaBeans-ը հիմք է տալիս բազմակի օգտագործման, ներկառուցվող և մոդուլային ծրագրային բաղադրիչների համար։ JavaBeans-ը գալիս է բազմաթիվ ձևերով, բայց դրանք առավել հաճախ օգտագործվում են GUI տարրերում։ JavaBeans-ի ստեղծման նպատակներից մեկը նմանատիպ բաղադրիչ կառուցվածքների հետ փոխգործակցությունն է։ Օրինակ, Windows ծրագիրը, հաշվի առնելով համապատասխան կամուրջը կամ  դեկորատոր օբյեկտը, կարող է օգտագործել JavaBeans բաղադրիչը, կարծես դա COM կամ ActiveX բաղադրիչ է։

## JavaBean նկարագրության կանոններ
Որպեսզի դասը աշխատի որպես  bean, այն պետք է հետևի որոշակի մեթոդի անվանման, կոնստրուկտորի և վարքագծի կանոններին։ Այս կոնվենցիաները հնարավորություն են տալիս ստեղծել գործիքներ, որոնք կարող են օգտագործել, փոխարինել և կապել JavaBeans-ը։

Նկարագրության կանոններն են.

* Դասը պետք է ունենա անպարամետր կոնստրուկտոր՝ `public` հասանելիության փոփոխիչով։ Նման կոնստրուկտորը գործիքներին հնարավորություն է տալիս ստեղծել օբյեկտ՝ առանց պարամետրերի լրացուցիչ բարդության։
* Դասի հատկությունները պետք է հասանելի լինեն get, set և այլ մեթոդների միջոցով (կոչվում են աքսեսուարներ), որոնք պետք է հետևեն անվանման ստանդարտ կոնվենցիային։ Սա հեշտությամբ թույլ է տալիս գործիքներին ավտոմատ կերպով հայտնաբերել և թարմացնել  bean բովանդակությունը։ Շատ գործիքներ նույնիսկ ունեն մասնագիտացված խմբագիրներ տարբեր տեսակի հատկությունների համար։
* Դասը պետք է սերիականացվի։ Սա հնարավորություն է տալիս հուսալիորեն պահպանել, պահել և վերականգնել bean վիճակը հարթակից և վիրտուալ մեքենայից անկախ եղանակով։
* Դասը պետք է ունենա հավասար(), hashCode() և toString() մեթոդները։

Քանի որ պահանջները հիմնականում գրված են որպես կոնվենցիա, այլ ոչ թե միջերես, որոշ մշակողներ JavaBeans-ը համարում են պարզ հին Java օբյեկտներ, որոնք հետևում են անվանման որոշակի կոնվենցիաներին։

## Օրինակներ

```java5
// PersonBean.java

public class PersonBean implements java.io.Serializable {
    private String name;
    private boolean deceased;

    public PersonBean() {
    }

    // Методы геттеры (get) и сеттеры (set)
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public boolean getDeceased() {
        return deceased;
    }
    public void setDeceased(boolean deceased) {
        this.deceased = deceased;
    }

    //Переопределенные методы equals() и hashCode()
    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }

        PersonBean that = (PersonBean) o;

        if (deceased != that.deceased) {
            return false;
        }
        return !(name != null ? !name.equals(that.name) : that.name != null);

    }

    @Override
    public int hashCode() {
        int result = name != null ? name.hashCode() : 0;
        result = 31 * result + (deceased ? 1 : 0);
        return result;
    }

    //Переопределенный метод toString()
    @Override
    public String toString() {
        return "PersonBean{" +
                "name='" + name + '\'' +
                ", deceased=" + deceased +
                '}';
    }
}
```

```java5
// TestPersonBean.java

public class TestPersonBean {
    public static void main(String[] args) {

        PersonBean person = new PersonBean();
        person.setName("Bob");
        person.setDeceased(true);

        // Результат: "Bob [deceased]"
        System.out.print(person.getName());
        System.out.println(person.getDeceased() ? " [deceased]" : " [alive]");
    }
}
```


## Ծանոթագրություններ

Կատեգորիա:Ջավա