A Constructivist Approach to Object-Oriented Design and Programming
ABSTRACT
1. INTRODUCTION
Computer science education is greatly affected by the objectoriented approach. This can be seen in the numerous new teachers being attracted to programming languages such as Java. Learning
the object-oriented approach is however difficult for novice students, mostly because it requires a new way of thinking about computing and more depth to grasp. Thus, to promote the object oriented approach at the introductory level, a re-examination of the teaching method is recommended. This article describes a pedagogical framework rooted in the constructivist epistemology for teaching object-oriented design and programming.
the object-oriented approach is however difficult for novice students, mostly because it requires a new way of thinking about computing and more depth to grasp. Thus, to promote the object oriented approach at the introductory level, a re-examination of the teaching method is recommended. This article describes a pedagogical framework rooted in the constructivist epistemology for teaching object-oriented design and programming.
1. INTRODUCTION
This article describes a teaching method to object-oriented design and programming motivated by principles found in the constructivist epistemology. The need for developing a constructivist teaching method arose when we realized that the predominant model of instruction at the introductory level - the objectivist model of learning - was inadequate for most students to learn object-oriented concepts, because it does not engage the mind appropriately to successfully tackle the challenges of the object-oriented approach. Learning the object-oriented approach is indeed difficult for most novice students, mostly because it is more abstract than the procedural approach. Moreover it requires new ways of thinking and more depth to grasp, particularly with
regard to the analysis and design activities prior to program coding, and when the problems to be solved were different from those whose solution was explained previously [4]. The constructivist view is more appropriate to deal with the pedagogical problems encountered in switching from the procedural approach to programming to the object-oriented paradigm, since it takes into account students’ prior knowledge in programming [5]. Moreover, constructivism offers a potentially powerful way to rethink the pedagogical practice at the introductory level by stressing the need for the learner to play an active role in constructing object-oriented knowledge.
Constructivism has been successfully implemented in mathematics and science education [9,10]. It can be adopted to our field with slight modifications. The remainder of this article is organized as follows. In section 2 we give an overview of the objectivist and the constructivist models of learning. In section 3 we reconceptualize object oriented knowledge within the constructivist epistemology. In section 4 we outline a constructivist approach to teaching object oriented design and programming at the introductory level. Finally, some remarks on further work conclude the article.
2. PARADIGMS OF LEARNING
2.1 The Objectivist Model of Learning
Baiically, programming at the introductory level relies on the objectivist model of learning which views learning as the passive transmission of knowledge. This model does not suggest that students’ prior knowledge, e.g. procedural programming, can affect current learning, e.g. object-oriented programming, since its metaphor of mind is that of a blank page, a tubula rum, waiting to be tilled with knowledge [lo]. Clearly, the objectivist model of learning does not engage the mind appropriately to go beyond inadequate prior knowledge. The result is, even after one year of instruction, a lack of conceptual understanding, bad programming habits, and serious misconceptions about object-oriented program development. Programming is understood as an art rather than a discipline with principles which guide the development of readable, modular, extensible, and reusable objects [8,12]. This situation is, to some extent, the result of passive learning: listening to lectures, reading textbooks, and doing programming work without engaging the mind appropriately to successfully tackle the object-oriented paradigm [5,8].
2.2 The Constructivist Model of Learning
In stark contrast to the objectivist view, the constructivist perspective regards learning less as the product of passive transmission than a process of active construction. Learning is an active process in which learners construct new knowledge based upon their prior knowledge. The constructivist perspective clearly diverges from the objectivist model of learning which presumes that knowledge can be put directly into the learner’s head. Interested readers should consult [1,3,5,6,8,9,10] for more details. Consequently, a constructivist approach to learning needs to probe prior knowledge and evaluate whether it conflicts with the knowledge being taught. Similarly, a constructivist methodology needs to evaluate how prior knowledge in programming conflicts with the object-oriented approach. If it does, new ways must be found of reconstructing the object-oriented concepts; otherwise there is no guarantee that the object-oriented approach will be adopted. Our experience with teaching Java indicates that students’ prior knowledge in procedural programming is, to some extent, a significant epistemological obstacle that makes it difficult to learn object-oriented concepts [4]. Our observation agrees with one made in [7, pp.1061 that the object-oriented approach is considered as “a paradigm shift in the world of programming - it is a radical change from traditional design methods”.
3. A CONSTRUCTIVIST VIEW OF OBJECT-ORIENTED KNOWLEDGE
3.1 Object-Oriented Knowledge Types
From a constructivist point of view, there are three types of knowledge which are relevant for the object-oriented approach: Object-oriented concepts, that is objects, classes, abstraction, encapsulation, inheritance, polymorphism, dynamic binding, and modularity. These concepts may be used to understand problem situations, to design object-oriented models, and to choose appropriate means of implementation. Moreover, students must learn to use object-oriented concepts within the WWW, by incorporating objects in a form that is reusable, concurrent, interactive, and distributed [2]. Then, we need an object-oriented language for implementing
object-oriented concepts. Today, Java is the most popular object-oriented language. It includes powerful means of implementation, such as the Java Development Kit (JDK), the WWW, visual application builder tools, as well as reusable components - JavaBeans - which can be adapted and
extended to fit the requirements of new problems. Finally, we need a variety of problem situations from which we derive problem-specific knowledge - that is the relevant features and the requirements of the problem situation in terms of object-oriented concepts. Traditional approaches to teaching object-oriented design and programming do not focus on building strong links between these knowledge types. However, from a constructivist point of view, these knowledge types need to be closely related to each other in order to be useful for problem-solving. This means that problem situations must be closely linked to object-oriented concepts and to the object-oriented language being used, which must themselves be closely linked to each other [3].
3.2 Skills for Constructing Object-Oriented Knowledge
The constructivist view asserts that the construction of closely linked knowledge necessitates particular types of problem-solving skills [9,10]. This is consistent with research and the practical experiences of expert software designers. Insights from software engineers indicate that designers focus on the overall structure of the software system, that is on the general functions of the parts and how they interrelate with each other to form the whole. Moreover, analysis and design activities are more central to the development of software than the code [ll]. This means that building object-oriented knowledge structures that are strongly linked to each other requires problem-solving at a higher level than the code level. The most important problem-solving skills for building closely connected object-oriented knowledge are: Analysis skills, such as understanding, describing, relining, and representing problem situations using object-oriented concepts.
Design skills, such as structuring, integrating, reusing, and combining object-oriented components. Analogical thinking skills, such as recognizing similarities and differences between problem situations or computational models using object-oriented concepts. Reflexive, critical thinking skills, such as evaluating, explaining, and justifying the solution process. Novice students use knowledge in different ways from experienced software designers. In contrast to experts, beginning students are usually not aware of the importance of problem solving skills. They focus on programming issues rather than on analysis and design aspects [ 11,121. In addition, students have a great deal of difficulty in solving new problems, because they cannot use object-oriented concepts to identify similarities between problems they have already solved and the new problem they are currently trying to solve [4,8].
4. A CONSTRUCTIVIST APPROACH TO OBJECT-ORIENTED DESIGN AND PROGRAMMING
The goal of a constructivist method to teaching object-oriented design and programming at the introductory level is to help each student to build closely linked knowledge that can be used for efficient problem-solving.
4.1 Principles
Our approach to teaching object-oriented design and programming at the introductory level is rooted in the following principles:
Object-oriented knowledge must be actively constructed by learners, not passively transmitted by teachers. Program development must be guided by object-oriented concepts, not by language technicalities. Students’ prior knowledge in programming needs to be evaluated whether it conflicts with the object-oriented approach. In order to be useful for problem-solving, object-oriented concepts must be strongly linked to problem situations and to the object-oriented language being used, which must themselves be strongly connected to each other. The process of constructing strongly linked object-oriented knowledge requires particular types of problem-solving skills. Traditional modes of teaching such as lectures must be replaced by a set of activities where the students are actively engaged in the knowledge being constructed.
To get students actively involved in problem-solving, the activities must focus around a set of realistic, intrinsically motivating problems.
4.2 Activities
To be successful, a teaching method motivated by constructivism needs to be organized around a set of activities where students are actively engaged in the knowledge being constructed. Each
activity includes four integrated steps: Firstly, the activity must rely on a realistic, intrinsically
interesting problem situation that motivates the students to construct object-oriented knowledge, including specific questions that probe students’ understanding. Secondly, the activity must refer to prior knowledge needed to do the activity, e.g. concepts, and language constructs students should be familiar with. ‘Likewise, substantial attention should be devoted to students’ misconceptions and programming practices that directly conflict with the object oriented approach.
Then, the activity must list the object-oriented knowledge that will be raised and addressed during the activity, e.g. the concept of inheritance, polymorphism, or modularity. The final step consists of reflecting on the solution process. This task is of primary importance for learning, since it helps the teacher to discover what and how the students have learned.
4.3 Examples of Activities
In this section we give an outline of some activities involving analysis, design, implementation, and evaluation processes. Design object-oriented models using existing solutions. This activity is based on the idea that the solutions of past problems can be used to specify the requirements of a new problem. To be able to reuse existing solutions, students need to identify conceptually similar problems they have previously analyzed. The solutions might be adapted, modified, and extended to meet the problem requirements. Finally, the activity consists of designing an object-oriented model on the basis of the information available. Explore the class library for reusable code. This activity will allow the exploration of class libraries using object-oriented concepts. It is of primary importance for the implementation process. Java and similar languages provide sufficient flexibility to achieve this activity. Basically, objects in class libraries can be reused, and extended with slight modifications, through inheritance. With reuse, students learn to incorporate existing software components - for example JavaBeans - , standard classes, and objects into the solutions of new problems. Existing code might be adapted and extended to fit new problems. Study experts’ design solutions. Students can learn most effectively from following design practices of expert software designers. Good examples of software design should include a study approach with experts’ solutions and a summary of experts’ thinking process. Students can then model their solutions on the basis of experts’ thought processes. Likewise, substantial attention should be devoted to well designed code, since it is extremely important for students to be able to read, modify, and extend good examples of well structured, object-oriented code [12]. Organize object-oriented knowledge in terms of similarities and differences. This activity will help students to structure object-oriented knowledge by continually making connections between previously taught knowledge and new knowledge. For instance, to build connections between simple and concurrent objects, students must look backward to what they have previously learned about simple objects. This is followed by looking forward in terms of developing concurrent objects. This method will allow them to organize knowledge in terms of similarities and differences. Object oriented concepts, models, or programs are compared (“How
are they alike?“), contrasted (“How are they different?‘), and then classified according to their similarities and differences. Develop alternative solutions. To increase the number of connections between object-oriented concepts and a variety of problem situations, it is important to use the concepts in different contexts. One way to do this is to develop multiple valid solutions for the same problem, for example solutions based on simple, distributed, and concurrent objects. By solving problems in more than one way, students learn to use object-oriented knowledge in different ways which enhances the links between solutions, problems, and concepts. Reflect on the solution process. Most students do not have the skills needed to reflect on what they are doing. Usually, they focus on the product rather than on the solution process. They conceive a solution is just a program that works for them, rather than a program that is readable for others,
modular, and extensible [S]. This activity helps students to reflect on their solutions by relating object-oriented concepts to the problem situation they are trying to solve. To do this successfully, students should be asked questions that probe for understanding of the object-oriented concepts underlying the problems’ solutions. This task will allow them to discover their own misconceptions about programming and to correct them. It is clearly evident that without reflection, students will be unwilling to abandon their design and programming practices based on misconceptions [8].
5. CONCLUSION
In this article, we have presented a teaching approach to object oriented design and programming motivated by principles found in the constructivist epistemology. We have come to this approach as we realized. that the predominant model of instruction - the objectivist model of learning - was inadequate to successfully tackle the pedagogical problems encountered in switching from the procedural approach to the object-oriented paradigm. Although we have only been able to outline the new approach in broader terms, we are convinced that constructivism offers - by defining learning as an active process of construction - a potentially powerful way to rethink the pedagogical practice at the introductory level by stressing the need for the learner to play an active role in constructing object-oriented knowledge. We are now in the process of implementing the new approach by introducing constructivist ideas step by step. Developing a
complete teaching strategy requires a long-term effort in several directions: we need to improve our understanding of students’ prior knowledge, refine the program of activities, explore problem-solving skills, develop better assessment and evaluation procedures, as well as material and teaching aids to support constructivist learning.
regard to the analysis and design activities prior to program coding, and when the problems to be solved were different from those whose solution was explained previously [4]. The constructivist view is more appropriate to deal with the pedagogical problems encountered in switching from the procedural approach to programming to the object-oriented paradigm, since it takes into account students’ prior knowledge in programming [5]. Moreover, constructivism offers a potentially powerful way to rethink the pedagogical practice at the introductory level by stressing the need for the learner to play an active role in constructing object-oriented knowledge.
Constructivism has been successfully implemented in mathematics and science education [9,10]. It can be adopted to our field with slight modifications. The remainder of this article is organized as follows. In section 2 we give an overview of the objectivist and the constructivist models of learning. In section 3 we reconceptualize object oriented knowledge within the constructivist epistemology. In section 4 we outline a constructivist approach to teaching object oriented design and programming at the introductory level. Finally, some remarks on further work conclude the article.
2. PARADIGMS OF LEARNING
2.1 The Objectivist Model of Learning
Baiically, programming at the introductory level relies on the objectivist model of learning which views learning as the passive transmission of knowledge. This model does not suggest that students’ prior knowledge, e.g. procedural programming, can affect current learning, e.g. object-oriented programming, since its metaphor of mind is that of a blank page, a tubula rum, waiting to be tilled with knowledge [lo]. Clearly, the objectivist model of learning does not engage the mind appropriately to go beyond inadequate prior knowledge. The result is, even after one year of instruction, a lack of conceptual understanding, bad programming habits, and serious misconceptions about object-oriented program development. Programming is understood as an art rather than a discipline with principles which guide the development of readable, modular, extensible, and reusable objects [8,12]. This situation is, to some extent, the result of passive learning: listening to lectures, reading textbooks, and doing programming work without engaging the mind appropriately to successfully tackle the object-oriented paradigm [5,8].
2.2 The Constructivist Model of Learning
In stark contrast to the objectivist view, the constructivist perspective regards learning less as the product of passive transmission than a process of active construction. Learning is an active process in which learners construct new knowledge based upon their prior knowledge. The constructivist perspective clearly diverges from the objectivist model of learning which presumes that knowledge can be put directly into the learner’s head. Interested readers should consult [1,3,5,6,8,9,10] for more details. Consequently, a constructivist approach to learning needs to probe prior knowledge and evaluate whether it conflicts with the knowledge being taught. Similarly, a constructivist methodology needs to evaluate how prior knowledge in programming conflicts with the object-oriented approach. If it does, new ways must be found of reconstructing the object-oriented concepts; otherwise there is no guarantee that the object-oriented approach will be adopted. Our experience with teaching Java indicates that students’ prior knowledge in procedural programming is, to some extent, a significant epistemological obstacle that makes it difficult to learn object-oriented concepts [4]. Our observation agrees with one made in [7, pp.1061 that the object-oriented approach is considered as “a paradigm shift in the world of programming - it is a radical change from traditional design methods”.
3. A CONSTRUCTIVIST VIEW OF OBJECT-ORIENTED KNOWLEDGE
3.1 Object-Oriented Knowledge Types
From a constructivist point of view, there are three types of knowledge which are relevant for the object-oriented approach: Object-oriented concepts, that is objects, classes, abstraction, encapsulation, inheritance, polymorphism, dynamic binding, and modularity. These concepts may be used to understand problem situations, to design object-oriented models, and to choose appropriate means of implementation. Moreover, students must learn to use object-oriented concepts within the WWW, by incorporating objects in a form that is reusable, concurrent, interactive, and distributed [2]. Then, we need an object-oriented language for implementing
object-oriented concepts. Today, Java is the most popular object-oriented language. It includes powerful means of implementation, such as the Java Development Kit (JDK), the WWW, visual application builder tools, as well as reusable components - JavaBeans - which can be adapted and
extended to fit the requirements of new problems. Finally, we need a variety of problem situations from which we derive problem-specific knowledge - that is the relevant features and the requirements of the problem situation in terms of object-oriented concepts. Traditional approaches to teaching object-oriented design and programming do not focus on building strong links between these knowledge types. However, from a constructivist point of view, these knowledge types need to be closely related to each other in order to be useful for problem-solving. This means that problem situations must be closely linked to object-oriented concepts and to the object-oriented language being used, which must themselves be closely linked to each other [3].
3.2 Skills for Constructing Object-Oriented Knowledge
The constructivist view asserts that the construction of closely linked knowledge necessitates particular types of problem-solving skills [9,10]. This is consistent with research and the practical experiences of expert software designers. Insights from software engineers indicate that designers focus on the overall structure of the software system, that is on the general functions of the parts and how they interrelate with each other to form the whole. Moreover, analysis and design activities are more central to the development of software than the code [ll]. This means that building object-oriented knowledge structures that are strongly linked to each other requires problem-solving at a higher level than the code level. The most important problem-solving skills for building closely connected object-oriented knowledge are: Analysis skills, such as understanding, describing, relining, and representing problem situations using object-oriented concepts.
Design skills, such as structuring, integrating, reusing, and combining object-oriented components. Analogical thinking skills, such as recognizing similarities and differences between problem situations or computational models using object-oriented concepts. Reflexive, critical thinking skills, such as evaluating, explaining, and justifying the solution process. Novice students use knowledge in different ways from experienced software designers. In contrast to experts, beginning students are usually not aware of the importance of problem solving skills. They focus on programming issues rather than on analysis and design aspects [ 11,121. In addition, students have a great deal of difficulty in solving new problems, because they cannot use object-oriented concepts to identify similarities between problems they have already solved and the new problem they are currently trying to solve [4,8].
4. A CONSTRUCTIVIST APPROACH TO OBJECT-ORIENTED DESIGN AND PROGRAMMING
The goal of a constructivist method to teaching object-oriented design and programming at the introductory level is to help each student to build closely linked knowledge that can be used for efficient problem-solving.
4.1 Principles
Our approach to teaching object-oriented design and programming at the introductory level is rooted in the following principles:
Object-oriented knowledge must be actively constructed by learners, not passively transmitted by teachers. Program development must be guided by object-oriented concepts, not by language technicalities. Students’ prior knowledge in programming needs to be evaluated whether it conflicts with the object-oriented approach. In order to be useful for problem-solving, object-oriented concepts must be strongly linked to problem situations and to the object-oriented language being used, which must themselves be strongly connected to each other. The process of constructing strongly linked object-oriented knowledge requires particular types of problem-solving skills. Traditional modes of teaching such as lectures must be replaced by a set of activities where the students are actively engaged in the knowledge being constructed.
To get students actively involved in problem-solving, the activities must focus around a set of realistic, intrinsically motivating problems.
4.2 Activities
To be successful, a teaching method motivated by constructivism needs to be organized around a set of activities where students are actively engaged in the knowledge being constructed. Each
activity includes four integrated steps: Firstly, the activity must rely on a realistic, intrinsically
interesting problem situation that motivates the students to construct object-oriented knowledge, including specific questions that probe students’ understanding. Secondly, the activity must refer to prior knowledge needed to do the activity, e.g. concepts, and language constructs students should be familiar with. ‘Likewise, substantial attention should be devoted to students’ misconceptions and programming practices that directly conflict with the object oriented approach.
Then, the activity must list the object-oriented knowledge that will be raised and addressed during the activity, e.g. the concept of inheritance, polymorphism, or modularity. The final step consists of reflecting on the solution process. This task is of primary importance for learning, since it helps the teacher to discover what and how the students have learned.
4.3 Examples of Activities
In this section we give an outline of some activities involving analysis, design, implementation, and evaluation processes. Design object-oriented models using existing solutions. This activity is based on the idea that the solutions of past problems can be used to specify the requirements of a new problem. To be able to reuse existing solutions, students need to identify conceptually similar problems they have previously analyzed. The solutions might be adapted, modified, and extended to meet the problem requirements. Finally, the activity consists of designing an object-oriented model on the basis of the information available. Explore the class library for reusable code. This activity will allow the exploration of class libraries using object-oriented concepts. It is of primary importance for the implementation process. Java and similar languages provide sufficient flexibility to achieve this activity. Basically, objects in class libraries can be reused, and extended with slight modifications, through inheritance. With reuse, students learn to incorporate existing software components - for example JavaBeans - , standard classes, and objects into the solutions of new problems. Existing code might be adapted and extended to fit new problems. Study experts’ design solutions. Students can learn most effectively from following design practices of expert software designers. Good examples of software design should include a study approach with experts’ solutions and a summary of experts’ thinking process. Students can then model their solutions on the basis of experts’ thought processes. Likewise, substantial attention should be devoted to well designed code, since it is extremely important for students to be able to read, modify, and extend good examples of well structured, object-oriented code [12]. Organize object-oriented knowledge in terms of similarities and differences. This activity will help students to structure object-oriented knowledge by continually making connections between previously taught knowledge and new knowledge. For instance, to build connections between simple and concurrent objects, students must look backward to what they have previously learned about simple objects. This is followed by looking forward in terms of developing concurrent objects. This method will allow them to organize knowledge in terms of similarities and differences. Object oriented concepts, models, or programs are compared (“How
are they alike?“), contrasted (“How are they different?‘), and then classified according to their similarities and differences. Develop alternative solutions. To increase the number of connections between object-oriented concepts and a variety of problem situations, it is important to use the concepts in different contexts. One way to do this is to develop multiple valid solutions for the same problem, for example solutions based on simple, distributed, and concurrent objects. By solving problems in more than one way, students learn to use object-oriented knowledge in different ways which enhances the links between solutions, problems, and concepts. Reflect on the solution process. Most students do not have the skills needed to reflect on what they are doing. Usually, they focus on the product rather than on the solution process. They conceive a solution is just a program that works for them, rather than a program that is readable for others,
modular, and extensible [S]. This activity helps students to reflect on their solutions by relating object-oriented concepts to the problem situation they are trying to solve. To do this successfully, students should be asked questions that probe for understanding of the object-oriented concepts underlying the problems’ solutions. This task will allow them to discover their own misconceptions about programming and to correct them. It is clearly evident that without reflection, students will be unwilling to abandon their design and programming practices based on misconceptions [8].
5. CONCLUSION
In this article, we have presented a teaching approach to object oriented design and programming motivated by principles found in the constructivist epistemology. We have come to this approach as we realized. that the predominant model of instruction - the objectivist model of learning - was inadequate to successfully tackle the pedagogical problems encountered in switching from the procedural approach to the object-oriented paradigm. Although we have only been able to outline the new approach in broader terms, we are convinced that constructivism offers - by defining learning as an active process of construction - a potentially powerful way to rethink the pedagogical practice at the introductory level by stressing the need for the learner to play an active role in constructing object-oriented knowledge. We are now in the process of implementing the new approach by introducing constructivist ideas step by step. Developing a
complete teaching strategy requires a long-term effort in several directions: we need to improve our understanding of students’ prior knowledge, refine the program of activities, explore problem-solving skills, develop better assessment and evaluation procedures, as well as material and teaching aids to support constructivist learning.
0 Response to "A Constructivist Approach to Object-Oriented Design and Programming"
Post a Comment