Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Martinsrj

Como criar uma Classe no ASP

Recommended Posts

Olá pessoal, boa tarde!

Possuo um código simples em php (POO) de calculadora:

<?php
class Calculadora {
 private $x = 6;
 private $y = 3;
 
 public function __construct(){
 }
 
 public function getX(){
  return $this->x;
 }
 public function setX($x){
  $this->x = $x;
 }
 public function getY(){
  return $this->y;
 }
 public function setY($y){
  $this->y = $y;
 }
 public function soma(){
  $soma = $this->x + $this->y;
  printf("A soma vale: %d\n" , $soma);
 }
 public function subtracao(){
  $subtracao = $this->x - $this->y;
  printf("A subtracao vale: %d\n" , $subtracao);
 }
 public function mostraAtributo(){
  printf("O Valor de X vale: %d\n O Valor de Y vale: %d\n" , $this->x , $this->y);
    }
}
class Principal {
 public static function main(){
  $obj = new Calculadora();
 
  $obj->soma();
  $obj->subtracao();
  $obj->mostraAtributo();
 }
}
Principal::main();
?>
Quero implementa-lo para o ASP Classico como seria?

ASP classico possui construtor?

Tanto no php ou em java tem os metodos de escrita (set) e de leitura (get), como seria no ASP?

Como declarar um atributo?

 

Desde já agradeço pela ajuda e esclarecimentos.

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Jonathan, bom dia!

 

Em primeiro lugar venho agradecer pelo link informado.

 

O mesmo código que fiz em PHP tentei coloca-lo em ASP. Veja o código abaixo:

<%
'''
''' Class Calculadora
'''
''' <author>Paulo Martins</author>
Class Calculadora
    Private x= 6
    Private y= 3

'''' 
''' Método construtor
''' <param>Calculadora</param>
'''
Public Sub Calculadora(x, y)
    x=x_
    y=y_  
End Sub

Public Property Get x()
	x=x_
End Property  

Public Property Let x(value)
	x_=value
End Property

Public Property Get y()
	y=y_
End Property  

Public Property Let y(value)
	y_=value
End Property

Public Function Soma()
    Soma = x_ + y_
    Response.Write ("A Soma de X e Y: " & soma)
End Function

Public Function subtracao()
    subtracao = x_ - y_
    Response.Write ("A Subtração de X e Y: " & subtracao)
End Function

Public Function ToString()
		ToString = "O Valor de X vale: " & x_ & "O Valor de Y vale: " & y_
End Function

	''' Este método é invocado quando eliminamos o objecto
Private Sub Class_Terminate()
	Set  Calculadora=nothing
End Sub
End class
%>
<%
'class Principal
			dim Calculadora
			Set obj = new Calculadora
			obj.subtracao() 'Chamando a função soma.
            obj.ToString() 
%>
Aparece o seguinte erro:

Tipo de erro:

Erro de compilação do Microsoft VBScript (0x800A0401)

Fim da instrução esperado

/classasp/classCalculadora.asp, line 7, column 9

Private x= 6

--------^

 

 

OBS.: o código do PHP está funcionando perfeitamente.

 

no asp também tem set e get, mas não é uma orientação aobjetos. veja esse exemplo: http://www.pedrocorreia.net/mySnippets/asp/Asp-Classic-OOP-E-Scripting-Dictionary

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em ASP (VBScript) não é permitido declarar uma variável e atribuir um valor ao mesmo tempo, exceto quando utiliza-se CONST.

 

Errado

Private x= 6
Private y= 3
Correto

Private x : x = 6
Private y : y = 3

Compartilhar este post


Link para o post
Compartilhar em outros sites

Continua dando erro:

Tipo de erro:

Erro de compilação do Microsoft VBScript (0x800A03EA)

Erro de sintaxe

/classasp/classCalculadora.asp, line 7, column 12

Private x : x = 6

-----------^

 

 

Em ASP (VBScript) não é permitido declarar uma variável e atribuir um valor ao mesmo tempo, exceto quando utiliza-se CONST.

 

Errado

Private x= 6
Private y= 3
Correto

Private x : x = 6
Private y : y = 3

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz um teste aqui e vi o erro. Para atribuir valores as variáveis, você deve fazer dentro de Class_Initialize()

Private x
Private y
Private Sub Class_Initialize()
x = 6
y = 3
End Sub

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tipo de erro:

Erro de compilação do Microsoft VBScript (0x800A03EA)

Erro de sintaxe

/classasp/classCalculadora.asp, line 9

x = 6

 

O meu código está assim:

<%
'''
''' Class Calculadora
'''
''' <author>Paulo Martins</author>
Class Calculadora
	Private x
	Private y
	x = 6
	y = 3
'''' 
''' Método construtor
''' <param>Calculadora</param>
'''
Public Sub Calculadora(x, y)
    x=x_
    y=y_  
End Sub

 

Fiz um teste aqui e vi o erro. Para atribuir valores as variáveis, você deve fazer dentro de Class_Initialize()

Private x
Private y
Private Sub Class_Initialize()
x = 6
y = 3
End Sub

Compartilhar este post


Link para o post
Compartilhar em outros sites

Teste ai que fiz assim para o rápido

 


<% 
Class Calculadora 
    Private x_
    Private y_
 
 	Private Sub Class_Initialize()
   		x_ = 6
		y_ = 3
	End Sub
	
	Private Sub Class_Terminate() 

	End Sub 
 
	Public Property Get x() 
        x = x_ 
	End Property   
 
	Public Property Let x(value) 
        x_ = value 
	End Property 
 
	Public Property Get y() 
        y = y_ 
	End Property   
 
	Public Property Let y(value) 
        y_ = value 
	End Property 
 
	Public Function Soma() 
   		Soma = me.x + me.y 
    	Response.Write ("A Soma de X e Y: " & soma) 
	End Function 
 
	Public Function subtracao() 
    	subtracao = me.x - me.y
   	 	Response.Write ("A Subtração de X e Y: " & subtracao) 
	End Function 
 
	Public Function ToString() 
                ToString = "O Valor de X vale: " & me.x & "O Valor de Y vale: " & me.y 
	End Function 
 
End class 

dim obj 
Set obj = new Calculadora 
obj.subtracao() 
obj.ToString()
set obj = nothing
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá saloeric!

Funcionou numa boa.

Fiz pequenas motificações no código:

<%
''' Class Calculadora
''' <author>Paulo Martins</author>
Class Calculadora
	Private x_
	Private y_
        
        Private Sub Class_Initialize()
            x_ = 6
            y_ = 3
        End Sub
        
        Private Sub Class_Terminate()
        End Sub
        
        Public Property Get x()
        	x=x_
        End Property 
         
        Public Property Let x(value)
        	x_=value
        End Property
        
        Public Property Get y()
        	y=y_
        End Property  
        
        Public Property Let y(value)
        	y_=value
        End Property
        
        Public Function Soma()
            Soma = me.x + me.y
            Response.Write ("A Soma de X e Y: " & soma)
            Response.Write ("<br>")
        End Function
        
        Public Function subtracao()
            subtracao = me.x - me.y
            Response.Write ("A Subtração de X e Y: " & subtracao)
            Response.Write ("<br>")
        End Function
        
        Public Function ToString()
        		ToString = "<br>O Valor de X vale: " & me.x & "<br>O Valor de Y vale: " & me.y
                Response.Write ToString
        End Function
End class

'class Principal
	dim obj
	Set obj = new Calculadora
	obj.subtracao() 'Chamando a função soma.
    obj.soma()
    obj.ToString() 
    set obj = nothing
%>

Dúvida:

Mesmo que no código acima não seja necessário, como eu incluíria o construtor padrão e o construtor com a passagem parametro como o do php ou java?

No Java ao criar o construtor não é necessário destrui-lo, diferente do PHP. Essa situação como seria no ASP?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá pessoal, boa tarde!

Fiz algumas modificações e coloquei conforme o código abaixo.

No momento através obj.x = 8 , obj.y = 4 estou inserindo os dados através dos metodos SET. Por favor me corrigem se errei na minha colocação!

Anteriormente, porem agora comentado já inciciei os atributos através do "construtor": obj.Calculadora 7, 3

 

Estou no aguardo para a correção, confirmação da minha colocação ou acrecimo no código.

 

Abraços.

<%
''' Class Calculadora
''' <author>Paulo Martins</author>
Class Calculadora
	Private x_
	Private y_
        
'--        Private Sub Class_Initialize()
'            x_ = 6
'            y_ = 3
'--        End Sub
        
        Private Sub Class_Terminate()
        End Sub
        
        Public Sub Calculadora(x_, y_)
		    x = x_
		    y = y_
	    End Sub
        
        Public Property Get x()
        	x=x_
        End Property 
         
        Public Property Let x(value)
        	x_=value
        End Property
        
        Public Property Get y()
        	y=y_
        End Property  
        
        Public Property Let y(value)
        	y_=value
        End Property
        
        Public Function Soma()
            Soma = me.x + me.y
            Response.Write ("A Soma de X e Y: " & soma)
            Response.Write ("<br>")
        End Function
        
        Public Function subtracao()
            subtracao = me.x - me.y
            Response.Write ("A Subtração de X e Y: " & subtracao)
            Response.Write ("<br>")
        End Function
        
        Public Function ToString()
        		ToString = "<br>O Valor de X vale: " & me.x & "<br>O Valor de Y vale: " & me.y
                Response.Write ToString
        End Function
End class

'-- class Principal
	dim obj
	Set obj = new Calculadora
'--    obj.Calculadora 7, 3
    obj.x = 8
    obj.y = 4
	obj.subtracao() 'Chamando a função soma.
    obj.soma()
    obj.ToString() 
    set obj = nothing
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá pessoal!

Possuo um classe de calculadora, porem não soma.

Aparece o seguinte resultado:

A Soma de X e Y: 105

 

O Valor de X vale: 10

O Valor de Y vale: 5

 

 

Obs.: a situação começou a ocorrer quando eu separei a Classe.

 

 

class2Calculadora.asp

 

<%
''' Class Calculadora
''' <author>Paulo Martins</author>
Class Calculadora
	Private x_
	Private y_
        
'--        Private Sub Class_Initialize()
'            x_ = 6
'            y_ = 3
'--        End Sub
        
        Private Sub Class_Terminate()
        End Sub
        
        Public Sub Calculadora(x_, y_)
		    x = x_
		    y = y_
	    End Sub
        
        Public Property Get x()
        	x=x_
        End Property 
         
        Public Property Let x(value)
        	x_=value
        End Property
        
        Public Property Get y()
        	y=y_
        End Property  
        
        Public Property Let y(value)
        	y_=value
        End Property
        
        Public Function Soma()
            Soma = me.x + me.y
            Response.Write ("A Soma de X e Y: " & Soma)
            Response.Write ("<br>")
        End Function
        
        Public Function subtracao()
            subtracao = me.x - me.y
            Response.Write ("A Subtração de X e Y: " & subtracao)
            Response.Write ("<br>")
        End Function
        
        Public Function ToString()
        		ToString = "<br>O Valor de X vale: " & me.x & "<br>O Valor de Y vale: " & me.y
                Response.Write ToString
        End Function
End class

'-- class Principal
'--	dim obj
'--	Set obj = new Calculadora
'--    obj.Calculadora 7, 3
'--    obj.x = 8
'--    obj.y = 4
'--	obj.subtracao() 'Chamando a função soma.
'--    obj.soma()
'--    obj.ToString() 
'--    set obj = nothing
%>

Pagina PRINCIPAL: indexCalculadora.asp

<!-- #include file ="class2Calculadora.asp" -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
</head>
<body>
<form method="post" action=""> 
<label>Calculadora</label>
Digite o Primeiro Valor:   <input type="text" id="x" name="x" /><br /> 
Digite o Segundo Valor <input type="text" id="y" name="y" /><br /> 
<input type="submit" value="Soma" id="btnSoma" name="btnSoma" /> 
</form> 

</body>
</html>
<%
'-- class Principal
'For Each dados in Request.Form 
'    vetDados(I) = Request.Form(dados)
'    I = I + 1
'Next 

	dim obj
	Set obj = new Calculadora
    '--obj.Calculadora 7, 3
    obj.Calculadora Request.Form("x"), Request.Form("y")
	'-- obj.subtracao() 'Chamando a função soma.
    obj.soma()
    obj.ToString() 
    set obj = nothing
 %>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Martins,

 

Coloca assim:

 

 

Public Sub Calculadora(x_, y_)

x = cDbl(x_)

y = cDbl(y_)

End Sub

 

 

A interpretação das variáveis está como String, por isso ele concatena ao invés de somar.

Com o cDbl a variável é convertida em um número duplo e realiza a soma.

 

Espero que ajude.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Era isso mesmo amigão.

Porem eu coloquei dessa forma:

Public Function Soma() 
   soma = CInt(me.x) + CInt(me.y) 
   Response.Write ("A Soma de X e Y: " & soma) 
   Response.Write ("<br>") 
End Function

 

Uma dúvida. Existe como eu criar vários botões como Soma, Subtração e quando o usuario clicar no botão soma executar o metodo: obj.soma()

e quando o usuario clicar no botão subtração executar o metodo: obj.subtracao()

 

 

Martins,

 

Coloca assim:

 

 

 

Public Sub Calculadora(x_, y_)

x = cDbl(x_)

y = cDbl(y_)

End Sub

 

 

A interpretação das variáveis está como String, por isso ele concatena ao invés de somar.

Com o cDbl a variável é convertida em um número duplo e realiza a soma.

 

Espero que ajude.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Martins,

 

O 'cInt' tem dois possíves poblemas, um é o limite (não me lembro agora exatamente qual, sei apenas que se for um número muito longo ele retorna um erro "estouro da variável" alguma coisa assim...), o outro é que ele trabalha apenas com números inteiros, se você quiser somar 1,2 + 2,1 o resultado será 3. Se você usar o 'cDbl' o resultado será 3,3 e evitará problemas com números longos.

 

Quanto aos botões, não conheço nenhuma forma de fazer em ASP direto, mas se você usar AJAX com Javascript/DHTML da pra fazer.

 

Talvez o pessoal do fórum conheça outra alternativa...

Compartilhar este post


Link para o post
Compartilhar em outros sites

ASP direto, mas se você usar AJAX com Javascript/DHTML da pra fazer

Correto. Sem dar refresh na página, somente com ASP não tem jeito, você precisará utilizar Ajax.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Hargon!

 

Como seria com apenas com ASP.

Não estou sabendo vincular o botão com a chamada do metodo.

Pagina Principal: indexCalculadora.asp
<!-- #include file ="class2Calculadora.asp" -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>###::: Classe Principal - Calculadora :::###</title>
</head>
<body>
<%
	dim obj
	Set obj = new Calculadora
    obj.Calculadora Request.Form("x"), Request.Form("y")
	obj.subtracao()
    obj.soma()
    obj.ToString() 
    set obj = nothing
 %>
<br /><br />
<form method="post" action=""> 
<label>Calculadora</label><br />
Digite o Primeiro Valor:   <input type="text" id="x" name="x" /><br /> 
Digite o Segundo Valor:  <input type="text" id="y" name="y" /><br /> 
<input type="submit" value="Soma" id="btnSoma" name="btnSoma" onclick=""/>
<input type="submit" value="Subtração" id="btnSub" name="btnSub" onclick=""/>
</form> 

</body>
</html>

ASP direto, mas se você usar AJAX com Javascript/DHTML da pra fazer

Correto. Sem dar refresh na página, somente com ASP não tem jeito, você precisará utilizar Ajax.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como foi dito, apenas com ASP não tem jeito, pois será dado refresh.

 

Veja o exemplo abaixo:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>###::: Classe Principal - Calculadora :::###</title>
</head>
<body>
<%
If (Request.Form("btnCalculo") = "Somar") Then
    dim obj
	Set obj = new Calculadora
    obj.Calculadora Request.Form("x"), Request.Form("y")
    obj.soma()
    obj.ToString() 
    set obj = nothing
ElseIf (Request.Form("btnCalculo") = "Subtrair") Then
    dim obj
	Set obj = new Calculadora
    obj.Calculadora Request.Form("x"), Request.Form("y")
    obj.subtracao()
    obj.ToString() 
    set obj = nothing
End If
 %>
<br /><br />
<form method="post" action="indexCalculadora.asp"> 
<label>Calculadora</label><br />
Digite o Primeiro Valor:   <input type="text" id="x" name="x" /><br /> 
Digite o Segundo Valor:  <input type="text" id="y" name="y" /><br /> 
<input type="submit" value="Somar" id="btnSoma" name="btnCalculo" onclick=""/>
<input type="submit" value="Subtrair" id="btnSubtracao" name="btnCalculo" onclick=""/>
</form> 

</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu campeão!

 

Como foi dito, apenas com ASP não tem jeito, pois será dado refresh.

 

Veja o exemplo abaixo:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>###::: Classe Principal - Calculadora :::###</title>
</head>
<body>
<%
If (Request.Form("btnCalculo") = "Somar") Then
    dim obj
	Set obj = new Calculadora
    obj.Calculadora Request.Form("x"), Request.Form("y")
    obj.soma()
    obj.ToString() 
    set obj = nothing
ElseIf (Request.Form("btnCalculo") = "Subtrair") Then
    dim obj
	Set obj = new Calculadora
    obj.Calculadora Request.Form("x"), Request.Form("y")
    obj.subtracao()
    obj.ToString() 
    set obj = nothing
End If
 %>
<br /><br />
<form method="post" action="indexCalculadora.asp"> 
<label>Calculadora</label><br />
Digite o Primeiro Valor:   <input type="text" id="x" name="x" /><br /> 
Digite o Segundo Valor:  <input type="text" id="y" name="y" /><br /> 
<input type="submit" value="Somar" id="btnSoma" name="btnCalculo" onclick=""/>
<input type="submit" value="Subtrair" id="btnSubtracao" name="btnCalculo" onclick=""/>
</form> 

</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.