Статьи

NetBeans в классе: как научить JavaBeans


колледже Доусон в Монреале, Канада. Он также является программным консультантом и по совместительству преподавателем в Школе расширенного обучения при Институте вычислительной техники Университета Конкордия . Он ведет блог на omniprogrammer.com и пишет в Твиттере @omniprof . Его регулярные колонки о NetBeans в образовании перечислены здесь .

Бобы, бобы, полезны для вашего сердца, чем больше вы едите, тем больше вы …

Я без ума от бобов. Не те, которые я ем, а бобы, которые я кодирую. Реальный мир — очень сложное место. Я объясняю своим студентам, что программное обеспечение, которое мы пишем, извлекает минимальный объем информации из реальной работы для решения проблемы. Это называется абстракция. Информация, которая используется для решения проблем, редко соответствует одному примитиву. Вместо этого нам нужно объединить различные типы данных, такие как целые, двойные, логические значения и строки. Нам может понадобиться использовать объект данных в качестве члена другого объекта данных.

Объяснение, которое я когда-то читал о разнице между структурированными и объектно-ориентированными программистами, звучало примерно так: «Структурированные программисты сосредотачиваются на действиях, которые будет выполнять их программа, и проектируют структуры данных, чтобы соответствовать действиям. Объектно-ориентированные программисты работают наоборот. сначала смоделировав данные, а затем решив, какие действия с ними выполнить ». Это, конечно, грубое упрощение, но оно позволяет мне высказать мнение о том, что я считаю важным в объектно-ориентированном программировании. Данные могут существовать без программ, но программы не могут существовать без данных. Поэтому программист должен смоделировать данные до того, как они напишут программу, независимо от методологии.

После того, как я прочитал лекции по различным примитивным типам, я сразу же дал своим студентам упражнение в проектировании предметов. Я ищу некоторую общую информацию, которую они имеют в своей среде. Например, здесь, в Канаде, правительство требует, чтобы на многих промышленных товарах были этикетки, обозначающие энергию, которую потребляет продукт. Для печи это электричество, а для автомобиля — бензин, дизель или электричество.

Для этого упражнения я даю студентам следующую информацию.

Тогда я включаю Energuide.

Из этой информации я ожидаю следующий класс от моих учеников.

package com.kenfogel.carbean;

/**
 * Data model for the energy consumption of an automobile
 *
 * @author Ken
 */
public class MyCarBean {

    // Model data
    private String manufacturer;
    private String model;
    private int engineDisplacement;
    private int cylinders;
    private String transmission;
    private String driveTrain;
    private int weight;

    // Fuel consumption data
    private double cityConsumptionInLitres;
    private double cityConsumptionInMilesPerGallon;
    private double highwayConsumptionInLitres;
    private double highwayConsumptionInMilesPerGallon;
    private double estimatedAnnualFuelCost;

}

Обратите внимание, что я использую длинные выразительные имена. Я вообще запрещаю аббревиатуры и сокращения. Я предпочитаю продажи лодок, а не рыдания.

Все переменные класса являются закрытыми и поэтому недоступны для любого кода, не входящего в этот класс. Без такой IDE, как NetBeans, мне понадобилось бы немало времени, чтобы объяснить конструкторы, сеттеры и геттеры. Но в NetBeans мне просто нужно указать, чтобы поместить курсор в пустую строку после последней переменной, перейти в меню «Источник» и выбрать «Вставить код».

Откроется небольшое диалоговое окно, и здесь они выберут Getter и Setter.

В следующем диалоговом окне отображаются все переменные класса. Поскольку нам нужны сеттеры и геттеры для всех них, мы просто отмечаем флажок с именем класса MyCarBean и нажимаем Generate.

Теперь у студента есть первый, почти полный, компонент данных.

package com.kenfogel.carbean;

/**
 * Data model for the energy consumption of an automobile
 *
 * @author Ken
 */
public class MyCarBean {

    // Model data
    private String manufacturer;
    private String model;
    private int engineDisplacement;
    private int cylinders;
    private String transmission;
    private String driveTrain;
    private int weight;

    // Fuel consumption data
    private double cityConsumptionInLitres;
    private double cityConsumptionInMilesPerGallon;
    private double highwayConsumptionInLitres;
    private double highwayConsumptionInMilesPerGallon;
    private double estimatedAnnualFuelCost;

    public String getManufacturer() {
        return manufacturer;
    }

    public void setManufacturer(String manufacturer) {
        this.manufacturer = manufacturer;
    }

    public String getModel() {
        return model;
    }

    public void setModel(String model) {
        this.model = model;
    }

    public int getEngineDisplacement() {
        return engineDisplacement;
    }

    public void setEngineDisplacement(int engineDisplacement) {
        this.engineDisplacement = engineDisplacement;
    }

    public int getCylinders() {
        return cylinders;
    }

    public void setCylinders(int cylinders) {
        this.cylinders = cylinders;
    }

    public String getTransmission() {
        return transmission;
    }

    public void setTransmission(String transmission) {
        this.transmission = transmission;
    }

    public String getDriveTrain() {
        return driveTrain;
    }

    public void setDriveTrain(String driveTrain) {
        this.driveTrain = driveTrain;
    }

    public int getWeight() {
        return weight;
    }

    public void setWeight(int weight) {
        this.weight = weight;
    }

    public double getCityConsumptionInLitres() {
        return cityConsumptionInLitres;
    }

    public void setCityConsumptionInLitres(double cityConsumptionInLitres) {
        this.cityConsumptionInLitres = cityConsumptionInLitres;
    }

    public double getCityConsumptionInMilesPerGallon() {
        return cityConsumptionInMilesPerGallon;
    }

    public void setCityConsumptionInMilesPerGallon(double cityConsumptionInMilesPerGallon) {
        this.cityConsumptionInMilesPerGallon = cityConsumptionInMilesPerGallon;
    }

    public double getHighwayConsumptionInLitres() {
        return highwayConsumptionInLitres;
    }

    public void setHighwayConsumptionInLitres(double highwayConsumptionInLitres) {
        this.highwayConsumptionInLitres = highwayConsumptionInLitres;
    }

    public double getHighwayConsumptionInMilesPerGallon() {
        return highwayConsumptionInMilesPerGallon;
    }

    public void setHighwayConsumptionInMilesPerGallon(double highwayConsumptionInMilesPerGallon) {
        this.highwayConsumptionInMilesPerGallon = highwayConsumptionInMilesPerGallon;
    }

    public double getEstimatedAnnualFuelCost() {
        return estimatedAnnualFuelCost;
    }

    public void setEstimatedAnnualFuelCost(double estimatedAnnualFuelCost) {
        this.estimatedAnnualFuelCost = estimatedAnnualFuelCost;
    }

}

What is missing is the constructor and some other methods and that will be the topic for my next article.