<pedrocorreia.net ⁄>
corner
<mySearch ⁄> <mySearch ⁄>

corner
 
corner
<mySnippets order="rand" ⁄> <mySnippets order="rand" ⁄>

corner
 
corner
<myContacts ⁄> <myContacts ⁄>

<email ⁄>


pc@pedrocorreia.net

<windows live messenger ⁄>


pedrojacorreia@hotmail.com

<myCurriculum type="pdf" ⁄>


Download
corner
 
corner
<myBlog show="last" ⁄> <myBlog show="last" ⁄>

corner
 
corner
<myNews show="rand" ⁄> <myNews show="rand" ⁄>

corner
 
corner
<myNews type="cat" ⁄> <myNews type="cat" ⁄>

corner
 
corner
<myQuote order="random" ⁄> <myQuote order="random" ⁄>

corner
 
corner
<myPhoto order="random" ⁄> <myPhoto order="random" ⁄>

<pedrocorreia.net ⁄>
corner
 
corner
<myAdSense ⁄> <myAdSense ⁄>

corner
 
corner
<myVisitorsMap ⁄> <myVisitorsMap ⁄>

corner
 
 

<Asp Classic 'OOP' e Scripting.Dictionary ⁄ >




clicks: 13410 13410 2008-05-24 2008-05-24 goto mySnippets mySnippets asp  Download  Bookmark This Bookmark This



O Asp (clássico) não suporta verdadeiramente OOP, é uma linguagem procedimental, à semelhança do PHP4, porém no PHP4 também existe uma breve introdução ao OOP, ainda que pouco implementado.
No ASP passa-se algum semelhante, porém podemos recorrer a Classes, para quem vem do VB6 já sabe +/- como são construídas.

A Class será semelhante a uma Class normal de OOP, terá um nome, será constituida por métodos, atributos e será instanciada também com a keyword "new".
Para acedermos aos métodos será de igual maneira, por ex:

- "objecto.Metodo param1, param2, paramN"


Outro tema abordado neste snippet é o "Scripting.Dictionary", podem obter mais informação neste link. Permite-nos armazenar informação num sistema de tuplos, chave=>informação (key=>item), isto faz com que por ex. não possam existir keys duplicadas, mas deêm uma vista de olhos no link que vão encontrar melhor e mais informação pormenorizada.



Basicamente, vamos implementar uma simples escola que será composta por alunos (prof. aqui não entra! :)) e essa escola que terá um nome também, será a class School; depois vai existir uma Class Student que vai conter as informações respectivas ao aluno.

A escola vai conter uma colecção de alunos (Scripting.Dictionary), sendo que podemos efectuar várias operações: podemos adicionar e efectuar várias alterações aos alunos; podemos formatar a informação para que seja mostrada ao utilizador; etc; etc.


- style.css, mais do mesmo, o CSS é quase sempre igual ;)
  1. *{padding: 0; margin: 0;}
  2.  
  3. body{
  4. font-family: Verdana, Tahoma, Arial, sans-serif;font-size: 62.5%;
  5. color: #000;background: #fff;text-align: justify;margin-top: .5em;
  6. }
  7. div#container{
  8. margin: 0 auto;
  9. width: 40em;
  10. padding: .8em;
  11. border: solid 0.6em #3F4C6B;
  12. overflow: auto;
  13. }
  14.  
  15. div.info{
  16. padding: .4em;
  17. border: solid 0.4em #6BBA70;
  18. margin: .4em 0;
  19. }
  20.  
  21. span, strong{font-size: 1.1em;color: #D01F3C;}
  22. strong{color: #356AA0 !important; font-weight: 900;}
  23.  
  24. a{text-decoration: none;outline: 0;}



- Student.asp, contém informações sobre o estudante;
  1. <%
  2. Class Student
  3.  
  4. Private id_
  5. Private name_
  6. Private avg_
  7.  
  8. ''''
  9. ''' Método construtor
  10. ''' <param>Nome</param>
  11. ''' <param>ID</param>
  12. ''' <param>Média</param>
  13. '''
  14. Public Sub Student(name_, id_, avg_)
  15. Name=name_
  16. ID=id_
  17. Avg=avg_
  18. End Sub
  19.  
  20. ''''
  21. ''' Getter - Nome
  22. ''' <returns>String</returns>
  23. '''
  24. Public Property Get Name()
  25. Name=name_
  26. End Property
  27.  
  28. ''''
  29. ''' Setter - Nome
  30. ''' <param>Nome do Aluno</param>
  31. '''
  32. Public Property Let Name(value)
  33. name_=value
  34. End Property
  35.  
  36. ''''
  37. ''' Getter - ID
  38. ''' <returns>Int</returns>
  39. '''
  40. Public Property Get ID()
  41. ID=id_
  42. End Property
  43.  
  44. ''''
  45. ''' Setter - ID
  46. ''' <param>ID do Aluno</param>
  47. '''
  48. Public Property Let ID(value)
  49. id_=value
  50. End Property
  51.  
  52. ''''
  53. ''' Getter - Média
  54. ''' <returns>Float</returns>
  55. '''
  56. Public Property Get Avg()
  57. Avg=avg_
  58. End Property
  59.  
  60. ''''
  61. ''' Setter - Média
  62. ''' <param>Média do Aluno</param>
  63. '''
  64. Public Property Let Avg(value)
  65. avg_=value
  66. End Property
  67.  
  68. ''''
  69. ''' Formatar aluno
  70. ''' <returns>String</returns>
  71. '''
  72. Public Function ToString()
  73. ToString="<span>N.º</span> <strong>" & id_ & "</strong>; " _
  74. & "<span>Nome:</span> <strong>" & name_ & "</strong>; " _
  75. & "<span>Média:</span> <strong>" & avg_ & "</strong>"
  76. End Function
  77.  
  78. ''''
  79. ''' Serializar aluno para que o possamos armazenar
  80. ''' <returns>String</returns>
  81. '''
  82. Public Function Serialize()
  83. Serialize=id_ & "#" & name_ & "#" & avg_
  84. End Function
  85.  
  86. ''''
  87. ''' Des-serializar aluno
  88. ''' Preenche um objecto do tipo Student mediante uma string serializada
  89. ''' <param>Aluno Serializado</param>
  90. '''
  91. Public Sub Unserialize(str)
  92. Dim arr
  93. arr=Split(str,"#")
  94. ID=arr(0)
  95. Name=arr(1)
  96. Avg=arr(2)
  97. End Sub
  98.  
  99. End Class
  100. %>



- School.asp, contém informações sobre a escola; aqui vamos recorrer ao Scripting.Dictionary para armazenar as informações dos alunos.
Como vamos ter um "objecto" do tipo Student, não será possivel armazenar directamente o objecto no "dicionário", para ultrapassar isso foram criados 2 métodos: Serialize e Unserialize, mas encontram-se devidamente documentados;
  1. <%
  2.  
  3. '''
  4. ''' Class escola, possui vários estudantes.
  5. '''
  6. ''' <author>pedrocorreia.net</author>
  7. Class School
  8.  
  9. Private name_
  10. Private students
  11.  
  12. '''
  13. ''' Esta é o método inicializador da aplicação, não é obrigatório,
  14. ''' porém se não existir o ASP irá encarregar-se de o adicionar.
  15. '''
  16. ''' Neste caso vamos usá-lo para inicializar o nosso Dictionary
  17. '''
  18. Public Sub Class_Initialize()
  19. Set students=Server.CreateObject("Scripting.Dictionary")
  20. End Sub
  21.  
  22. ''''
  23. ''' Método construtor
  24. ''' <param>Nome da Escola</param>
  25. '''
  26. Public Sub School(name_)
  27. Name=name_
  28. End Sub
  29.  
  30. ''''
  31. ''' Getter - nome da Escola
  32. ''' <returns>String</returns>
  33. '''
  34. Public Property Get Name()
  35. Name=name_
  36. End Property
  37.  
  38. ''''
  39. ''' Setter - nome da Escola
  40. ''' <param>Nome da Escola</param>
  41. '''
  42. Public Property Let Name(value)
  43. name_=value
  44. End Property
  45.  
  46. ''''
  47. ''' Contagem de alunos
  48. ''' <returns>Int</returns>
  49. '''
  50. Public Function CountStudents
  51. CountStudents=students.Count
  52. End Function
  53.  
  54. ''''
  55. ''' Adicionar estudante
  56. ''' <param>Student</param>
  57. ''' <remarks>Se o aluno já existe é actualizado</remarks>
  58. '''
  59. Public Sub AddStudent(student)
  60. If Not students.Exists(student.ID) Then
  61. students.Add student.ID,student.serialize
  62. Else
  63. UpdateStudent student
  64. End If
  65. End Sub
  66.  
  67. ''''
  68. ''' Actualizar estudante
  69. ''' <param>Student</param>
  70. '''
  71. Public Sub UpdateStudent(student)
  72. If students.Exists(student.ID) Then
  73. students.Item(student.ID)=student.serialize
  74. End If
  75. End Sub
  76.  
  77. ''''
  78. ''' Obter estudante
  79. ''' <returns>Student</returns>
  80. '''
  81. Public Function GetStudent(id)
  82. GetStudent=students.Item(id)
  83. End Function
  84.  
  85. ''''
  86. ''' Formatar output da Escola
  87. ''' <returns>String</returns>
  88. '''
  89. Public Function ToString
  90. Dim str
  91. Dim aux_student
  92. Set aux_student=New Student
  93.  
  94. str="<strong><span>Escola:</span></strong> <strong>" & name_ & "</strong><br/>"
  95. str = str & "<br/><strong><span>Lista de Alunos:</span></strong>"
  96.  
  97. For Each item In students.Keys
  98. aux_student.Unserialize(GetStudent(item))
  99. str = str & "<br/>" & aux_student.ToString
  100. Next
  101.  
  102. str = str & "<br/><br/>"
  103. str = str & "<strong><span>N.º Alunos:</span></strong> <strong>" & CountStudents & "</strong>"
  104. str = str & "<br/><strong><span>Média:</span></strong> <strong>" & CalculateAvg & "</strong>"
  105.  
  106. ToString="<div class='info'>" & str & "</div>"
  107. End Function
  108.  
  109. ''''
  110. ''' Formatar output de um estudante especifico
  111. ''' <param>Student</param>
  112. ''' <returns>String</returns>
  113. '''
  114. Public Function ToStringStudent(student)
  115. Dim aux_student
  116. Set aux_student=New Student
  117. aux_student.Unserialize(GetStudent(student.ID))
  118. ToStringStudent="<div class='info'>" & aux_student.ToString & "</div>"
  119. End Function
  120.  
  121. ''''
  122. ''' Calcular média da escola
  123. ''' <returns>Float</returns>
  124. '''
  125. Public Function CalculateAvg
  126. Dim aux_student
  127. Set aux_student=New Student
  128. Dim sum
  129. sum=0
  130.  
  131. For Each item In students.Keys
  132. aux_student.Unserialize(GetStudent(item))
  133. sum=sum+aux_student.Avg
  134. Next
  135.  
  136. CalculateAvg=sum/CountStudents
  137. End Function
  138.  
  139. ''' Este método é invocado quando eliminamos o objecto
  140. Private Sub Class_Terminate()
  141. Set students=nothing
  142. End Sub
  143.  
  144. End class
  145.  
  146. %>
  147.  








- index.asp, este poderá ser um conjunto de operações sobre as classes Student e School
  1. <!-- #include file ="Student.asp" -->
  2. <!-- #include file ="School.asp" -->
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  4. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  5. <html xmlns="http://www.w3.org/1999/xhtml">
  6. <head>
  7. <title>Classic Asp OOP e Scripting.Dictionary</title>
  8. <link rel="Stylesheet" href="style.css" type="text/css" />
  9. </head>
  10. <body>
  11. <div id="container">
  12. <%
  13. 'criar Escola
  14. dim my_school
  15. Set my_school= new School
  16. my_school.School "Escola Secundária de Sobral de Monte Agraço"
  17.  
  18. 'criar Aluno1
  19. dim my_student1
  20. Set my_student1= new Student
  21. my_student1.Student "Pedro Correia",1,11
  22.  
  23. 'criar Aluno2
  24. dim my_student2
  25. Set my_student2= new Student
  26. my_student2.Student "Rui Costa",2,12
  27.  
  28. 'adicionar Alunos à Escola
  29. my_school.AddStudent my_student1
  30. my_school.AddStudent my_student2
  31.  
  32. 'escrever o estado actual da Escola
  33. Response.Write("Estado actual da Escola<br/>")
  34. Response.Write(my_school.ToString)
  35.  
  36. 'alterar média dos Alunos 1 e 2
  37. Response.Write("Actualizar média dos aluno 1 e 2<br/>")
  38. my_student1.Avg=14
  39. my_student2.Avg=16
  40.  
  41. 'actualizar alunos
  42. my_school.UpdateStudent my_student1
  43. my_school.UpdateStudent my_student2
  44.  
  45. 'escrever novos dados dos alunos
  46. Response.Write(my_school.ToStringStudent(my_student1))
  47. Response.Write(my_school.ToStringStudent(my_student2))
  48.  
  49. 'escrever o estado actual da Escola
  50. Response.Write("Estado actual da Escola<br/>")
  51. Response.Write(my_school.ToString)
  52.  
  53. 'limpar recursos
  54. Set my_school=nothing
  55. Set my_student1=nothing
  56. Set my_student2=nothing
  57.  
  58. %>
  59. </div>
  60. </body>
  61. </html>
  62.  




Mediante as operação acima descritas, este será (se tudo correr dentro dos conformes ;)) o resultado final:





Qualquer erro/ dúvida é só dizer!









clicks: 13410 13410 2008-05-24 2008-05-24 goto mySnippets mySnippets asp  Download  Bookmark This Bookmark This