深入浅出,基于solo分类理论的概念教学核心思想与实战应用解析

作者:小菜 更新时间:2024-11-28 点击数:
简介:SOLO分类理论,是新西兰著名教育心理学家Biggs博士提出的一种以学生为中心的评估理论,主要解决个体认知与问题解决过程中的思维架构关联问题。

Biggs博士认为个体的学习成果结构(SOLO)与其整体认知结构并非直接相关。

...,武汉律师网

【菜科解读】

SOLO分类理论,由新西兰著名教育心理学家Biggs博士提出,是一种以学生为核心的教育评估框架,该理论旨在探讨个体认知与问题解决过程中的思维架构关联性,Biggs博士指出,个体的学习成果结构(SOLO)与其整体认知结构并非直接对应,整体认知结构是抽象且难以量化的,而SOLO分类评价法则聚焦于学生在学习过程中所展现的具体学习成果。

这一理论通过细致分析学生解题的思维模式,明确划分了学生在面对问题时所表现出的不同思维层级,SOLO分类评价法将学生的理解程度细分为五个阶段:前结构阶段、单点结构阶段、多点结构阶段、关联结构阶段和抽象拓展结构阶段,这五个阶段依次展现了个体从基础到复杂的思维发展脉络。

SOLO分类理论的核心在于关注思维的“质量”而非“数量”,与传统评分体系相比,SOLO评价法更重视通过分析学生的答案来衡量其思维的深度,而非仅仅关注答案的长度或与标准答案的契合度,在处理主观题时,SOLO评价法更看重学生的思考深度和思维的广度,Biggs博士的理论强调,认知发展具有阶段性,学习能力的提升不仅体现在阶段的跨越,也体现在对具体知识点的深入掌握,这五个层次揭示了学生从知识积累到思维飞跃的整个过程。

在历史学科的教学中,SOLO分类法具有显著的应用价值,它倡导学生针对具体问题进行深入探究,而非泛泛而谈,SOLO分类法具有操作性强、有助于明确教学目标、评估教学效果以及评价学生高级思维能力等优点,与皮亚杰的阶段理论不同,SOLO分类法更侧重于学生的学习成果,是一种以学生为中心的质性评价手段,该理论体系完整,实践基础坚实,已在历史、地理、数学、英语等多个学科领域得到广泛应用,并取得了显著成效。

SOLO分类评价法的五个层次与学生掌握知识的程度和思维水平密切相关,具体而言,前结构层次的学生难以理解问题或回答逻辑混乱;单点结构层次的学生仅凭单一线索草率作出结论;多点结构层次的学生能够联系多个孤立要点,但缺乏整合能力;关联结构层次的学生能够整合多个要点,形成连贯的回答;而拓展抽象结构层次的学生则能进行抽象概括,深化问题并拓展问题的内涵。

在教育评估领域,SOLO分类理论犹如一座导航灯塔,引领教育工作者深入探究学生的思维层级,该理论巧妙地将认知发展理论与质性评价相结合,揭示了思维层次的多样性,每个层次都代表了学生在特定知识领域的掌握程度和思维水平,是教师评估学生能力的重要参考,通过学生的回答,教师可以准确判断其思维层级,进而提供有针对性的指导和帮助,从单一结构水平到多元结构水平,再到关联结构水平,最终达到拓展抽象结构水平,这是一个逐步深入的过程,也体现了学生思维能力的持续提升,希望广大教育工作者能够深入探索SOLO理论,理解其核心理念,并将其应用于实际教学中,以促进学生全面而深入的发展。

WilliamRowden基于静态依赖的测试

概要 在William的演讲中,将使用JUnit和其他一些工具,如一个使用eclipse重构菜单的可测试系统、使用EasyMock进行注射伪对象依赖(在 constructor或者setter中),基于PowerMock的旁路封装,使用AspectJ分离concerns等。

还将讨论如何在已有代码的限制条件下,选择合适的方案解决单元测试的需求,并展示如何应用测试驱动新代码。

演讲中还会提供一些示例代码。

个人简介 William Rowden,经过认证的ScrumMaster、敏捷教练,在SolutionsIQ担任培训师,他在企业级敏捷实施方面有多年的经验。

他曾在美国、墨西哥和中国帮助客户学习敏捷软件开发过程中的技术和工程实践。

他已经和近百名管理人员、测试人员和开发者协作,帮助他们完成从传统开发方法到实施敏捷的转变。

除了教授技术实践,William还参与CSM和CSPO等课程培训。

关于会议 “敏捷技术日”由敏捷领域最具有影响力的技术社区InfoQ中文站发起和组织,旨在进一步在国内技术社区推广敏捷概念和实践,将敏捷实施领域备受关注以及比较前沿的领域整合在一起,以培训和分享的形式深入探讨中国企业如何更好地实施敏捷,以及正确地使用敏捷。

“敏捷技术日” 是开放的社区活动,同时邀请国内外有着相同使命的企业和个人共同参与。

WilliamRowden,基于,静态,依赖,的,测试,概要

基于jquery级联的下拉插件

var dataToOption = function(data, op) { var d = [], vs = [], hasFilter = op.filter && $.isFunction(op.filter); $.each(data, function(i, v) { if(!hasFilter || (hasFilter && op.filter(v, i))) { if($.inArray(v[op.dataMap.value], vs) == -1) { d.push($.extend({}, v)); vs.push(v[op.dataMap.value]); if(op.order) { var sp = op.order.split(‘ ‘), col = sp[0], sort = sp[1].toLowerCase() == ‘asc‘ ? 1 : -1; d.sort(function(a, b) { if(a[col] > b[col]) { return sort; } else if(a[col] ‘ + v[‘text‘] + ‘‘; return _ops; var createGroup = function(group, options) { return ‘‘ + options; if(op.preValue || op.preText) { ops += createOption({‘value‘: op.preValue, ‘text‘: op.preText}); if(gps[missGroup] != undefined) { ops += createOption(gps[missGroup]); delete gps[missGroup]; if(op.groupSort == ‘desc‘) { gps[‘keys‘].sort().reverse(); } else if(op.groupSort == ‘asc‘) { gps[‘keys‘].sort() $.each(gps[‘keys‘], function(i, v) { ops += createGroup(v, createOption(gps[v])); return ops; var mapData = function(data, map) { $.each(data, function(i, v) { $.each(map, function(j, k) { if(v[j] == undefined) { data[i][j] = v[k] == undefined ? ‘‘ : v[k]; delete data[i][k]; return data; var groupData = function(data) { var gps = {}; gps[‘keys‘] = []; var pushData = function(group, item) { if(gps[group] == undefined) { gps[group] = []; gps[group].push(item); var pushKey = function(key) { if($.inArray(key, gps[‘keys‘]) == -1) { gps[‘keys‘].push(key); $.each(data, function(i, v) { if(v[‘group‘]) { pushKey(v[‘group‘]); pushData(v[‘group‘], v); } else { pushData(missGroup, v); return gps; $.fn.fillselect = function(urlOrData, options) { return this.each(function() { var $t = $(this), op, dataReadyCallback, ajaxXHR = null; op = $.extend(true, {}, defaultOptions, options); $t.data(‘fillselectOptions‘, op); if(op.before && $.isFunction(op.before)) { op.before.apply($t); dataReadyCallback = function(data) { $t.html(dataToOption(data, op)); if(op.defaultValue) { $t.val(op.defaultValue); if(op.after && $.isFunction(op.after)) { op.after.apply($t); $t.trigger(‘change‘); if(typeof urlOrData == ‘string‘) { if(ajaxXHR) { ajaxXHR.abort(); ajaxXHR = $.ajax({ ‘url‘: urlOrData, ‘type‘: op.usePost ? ‘post‘ : ‘get‘, ‘data‘: op.params, ‘dataType‘: ‘json‘, ‘success‘: function(data) { ajaxXHR = null; if(data.status == ‘200‘) { dataReadyCallback(data.data || []); ‘error‘: function() { ajaxXHR = null; } else { dataReadyCallback(urlOrData); $.fn.chainselect = function(target, urlOrData, options) { return this.each(function() { $(this).bind(‘change‘, function() { var $t = $(this), op; op = $.extend(true, {}, defaultOptions , options); op.params[$t.attr(‘name‘) || $t.attr(‘id‘)] = $t.val(); op.params[‘id‘] = $t.val(); if($t.val() != $t.data(‘fillselectOptions‘).preValue) { $(target).fillselect(urlOrData, op); } else { op.after = null; $(target).fillselect([], op);})(jQuery);此段代码实际上包含了两个jq插件,第一个是fillselect用于填充select,支持data或url(ajax)的方式;第二个是chainselect用于级联select。

下面就详细介绍一下这段代码:var defaultOptions = { after: null, before: null, usePost: false, defaultValue: null, filter: null, preValue: ‘-1‘, preText: ‘請選擇‘, groupSort: ‘desc‘, order: ‘name asc‘, params: {}, dataMap: {‘text‘: ‘text‘, ‘value‘: ‘value‘, ‘group‘: ‘group‘} };插件的默认参数配置after:select数据载入结束事件callbackbefore:数据载入前事件callbackusePost:ajax请求方式,默认为GETdefaultValue:默认选中的值filter:数据过滤函数,类似jq的grep方法,使用方式也是一样的,第一个参数为value,第二个参数为key或index,当返回值为false即过滤掉该条数据,如:filter: function(v, i) { return v.count > 1; }过滤数据中count属性小于1的数据preValue,preText:初始option的值和文字groupSort:分组optgroup排序方式order:数据的排序方式,排序字段与方向空格隔开params:随ajax请求传递的参数dataMap:数据属性映射,目的提高插件对数据的自适应性,如真实数据是name,id,year,则dataMap: { ‘text‘: ‘name‘, ‘value‘: ‘id‘, ‘group‘: ‘year‘ };如果不使用分组功能,只需保留text和valuemissGroup:缺省分组名;dataToOption:用于将数据转换成option;mapData:将数据转成统一格式;groupData:将数据分组;这段实现逻辑略显冗长,因为实际项目中的需求多变,这个可根据实际需求简化一下代码。

$.fn.fillselect在dataReadyCallback中触发change事件主要目的是使此select的下一级生效;$.fn.chainselect多了一个target参数用于指向下一级的jq选择器。

那么现在来看下怎么使用,需求:厂牌brand->车款kind->车型model,ajax获取的数据格式为{status: 200, data: [{id: 1, name: ‘bmw‘}, {id: 2, name: ‘benz‘}]};车型的数据需要根据year_name分组 $(‘#brand‘).chainselect(‘#kind‘, ‘/request_url‘, { ‘dataMap‘: {‘value‘: ‘id‘, ‘text‘: ‘name‘}, ‘preValue‘: -1, ‘preText‘: ‘選擇/車款‘, ‘params‘: {‘type‘: ‘_cache_kind‘}, ‘before‘: function() { this.attr(‘disabled‘, true); ‘after‘: function() { this.removeAttr(‘disabled‘); ‘defaultValue‘: lastKindId || -1 $(‘#kind‘).chainselect(‘#model‘, ‘/request_url‘, { ‘dataMap‘: {‘value‘: ‘myid‘, ‘text‘: ‘name‘, ‘group‘: ‘year_name‘}, ‘preValue‘: -1, ‘preText‘: ‘選擇/車型‘, ‘params‘: {‘type‘: ‘_cache_model‘}, ‘filter‘: function(v, i) { return $.inArray(v.myid, myids) === -1; ‘before‘: function() { this.attr(‘disabled‘, true); ‘after‘: function() { this.removeAttr(‘disabled‘); $(‘#brand‘).fillselect(‘/request_url‘, { ‘dataMap‘: {‘value‘: ‘id‘, ‘text‘: ‘name‘}, ‘preValue‘: -1, ‘preText‘: ‘選擇/廠牌‘, ‘params‘: {‘type‘: ‘_cache_brand‘}, ‘defaultValue‘: lastBrandId || -1 }); 基于,jquery,级联,的,下拉,插件,基于,jquery

加入收藏
上一篇:九灵
下一篇:黄昏雨落一池秋
               

深入浅出,基于solo分类理论的概念教学核心思想与实战应用解析

点击下载文档

格式为doc格式

  • 账号登录
社交账号登录