Как я могу выполнить это ООП в качестве компонента ColdFusion (CFC)?

#oop #coldfusion #cfc

#ооп #coldfusion #cfc

Вопрос:

Сможет ли кто-нибудь объяснить, что просят меня сделать следующие вопросы. Мне не нужно знать код, просто было бы неплохо другое объяснение в терминах Coldfusion, чтобы я мог понять, что они просят меня написать.

Насколько я знаю, у ColdFusion нет «свойств», это должно быть смоделировано с помощью CFC.

  1. Создайте класс со следующими характеристиками

    • В нем должно быть три элемента данных (одно целое число, одна строка и один double) При создании объект должен инициализировать свои три элемента данных следующими значениями соответственно: 10, «hello world» и 1.234
    • Он должен содержать свойства, которые позволяют потребителю, использующему класс, извлекать и изменять любые значения элементов данных.
    • У него должен быть метод, который позволяет потребителю устанавливать все 3 значения за один вызов.
  2. Создайте метод, который создает новый экземпляр класса, указанного в вопросе 4: (вам не нужно писать какой-либо код для тестирования процедуры)

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

Комментарии:

1. Не совсем уверен, о чем вы спрашиваете. Вопросы довольно просты. Вы просите подробнее объяснить ColdFusion в терминологии Java?

2. <cfproperty> help.adobe.com/en_US/ColdFusion/9.0/CFMLRef /…

Ответ №1:

Это попахивает домашней работой, но мне нужен перерыв после унылого дня.

Ниже приведена конкретная реализация ColdFusion 9, использующая <cfproperty/> неявные методы получения и настройки. CFC переопределяет эти настройки для целых и двойных членов для выполнения проверки типа данных, которую ColdFusion не выполняет изначально.

BrownPeanut.cfc

 <!--- accessors="true" causes CF9 to set data in the "variables" scope --->
<cfcomponent output="false" accessors="true">
    <cfproperty name="MyDouble" type="numeric" />
    <cfproperty name="MyInteger" type="numeric" />
    <cfproperty name="MyString" type="string" />

    <cffunction name="init" output="false" access="public" returntype="BrownPeanut" hint="Constructor">
        <cfargument name="MyDouble" type="numeric" required="false" default="1.234"/>
        <cfargument name="MyInteger" type="numeric" required="false" default="10"/>
        <cfargument name="MyString" type="string" required="false" default="hello world"/>
        <cfset setMyDouble(arguments.myDouble)>
        <cfset setMyInteger(arguments.MyInteger)>
        <cfset setMyString(arguments.MyString)>
        <cfreturn this/>
    </cffunction>

    <cffunction name="setMyDouble" output="false" access="public" returntype="void"
        hint="Overrides default setter">
        <cfargument name="MyDouble" type="string" required="true"/>
        <!--- data type checking because ColdFusion does not natively make the distinction --->
        <cfset var jDouble = createObject("java", "java.lang.Double").init(arguments.myDouble)>
        <cfif jDouble.toString() NEQ arguments.myDouble>
            <cfthrow type="java.lang.IllegalArgumentException" message="Invalid double value '#arguments.MyDouble#'">
        </cfif>
        <cfset variables.MyDouble = arguments.MyDouble>
    </cffunction>

    <cffunction name="setMyInteger" output="false" access="public" returntype="void"
        hint="Overrides default setter">
        <cfargument name="MyInteger" type="string" required="true"/>
        <!--- data type checking because ColdFusion does not natively make the distinction --->
        <cfif NOT isValid("integer",arguments.MyInteger)>
            <cfthrow type="java.lang.IllegalArgumentException" message="Invalid integer value '#arguments.myInteger#'">
        </cfif>
        <cfset variables.myInteger = arguments.myInteger>
    </cffunction>
</cfcomponent>
  

BrownPeanut.cfm

 <cffunction name="WriteToDebugWindow" output="true" access="public" returntype="void" hint="">
    <cfargument name="data" type="string" required="true"/>
    <cfset var local = structNew()/>
    <!--- implementation goes here --->
    <cfoutput>#arguments.data#<br /></cfoutput>
</cffunction>

<cfset BrownPeanut = new BrownPeanut()>

<cfset writeToDebugWindow(BrownPeanut.getMyDouble())>
<cfset writeToDebugWindow(BrownPeanut.getMyInteger())>
<cfset writeToDebugWindow(BrownPeanut.getMyString())>
  

Комментарии:

1. Это форма домашней работы, вот почему я попросил другую форму объяснения. В любом случае, опубликованный вами BrownPeanut.cfc похож на то, что я написал изначально, но моя версия была неправильной. Но ваш код направил меня на правильный путь. Спасибо.

Ответ №2:

Итак, вам понадобится метод init, который инициализирует ваши значения в области this, а затем возвращает this . Возвращаемый тип должен быть похож на «path.to.yourCFC». Вам понадобятся отдельные методы получения и установки, а также один метод, который обновит их все. Последний метод должен просто вызывать отдельные установщики.