#oop #coldfusion #cfc
#ооп #coldfusion #cfc
Вопрос:
Сможет ли кто-нибудь объяснить, что просят меня сделать следующие вопросы. Мне не нужно знать код, просто было бы неплохо другое объяснение в терминах Coldfusion, чтобы я мог понять, что они просят меня написать.
Насколько я знаю, у ColdFusion нет «свойств», это должно быть смоделировано с помощью CFC.
-
Создайте класс со следующими характеристиками
- В нем должно быть три элемента данных (одно целое число, одна строка и один double) При создании объект должен инициализировать свои три элемента данных следующими значениями соответственно: 10, «hello world» и 1.234
- Он должен содержать свойства, которые позволяют потребителю, использующему класс, извлекать и изменять любые значения элементов данных.
- У него должен быть метод, который позволяет потребителю устанавливать все 3 значения за один вызов.
-
Создайте метод, который создает новый экземпляр класса, указанного в вопросе 4: (вам не нужно писать какой-либо код для тестирования процедуры)
- Используйте свойства, предоставляемые классом, чтобы получить значение каждого элемента данных и вывести значение в окно отладки, используя вымышленный и глобально доступный метод WriteToDebugWindow().
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». Вам понадобятся отдельные методы получения и установки, а также один метод, который обновит их все. Последний метод должен просто вызывать отдельные установщики.